본문 바로가기

Tech/iOS

[iOS]Day37 - AwakeFromNib, PrepareForReuse

728x90

일어나라 두한아 아니 멍청아..

오늘은 awakeFrombed 아니 nib


이전 게시물을 보면 AwakeFromNib과 PrepareForReuse가 있었다 한번 알아보자

 

PrepareForReuse

이전 게시물 Pagenation 쪽을 보면 빠르게 스크롤을 내릴 때 화면이 안보이는 상황이나 전혀 상관없는 이미지가 들어오는 경우가 있다

셀에 configure 되는 내용은 다르지만 셀 자체는 재사용되기 때문에 content와 무관한 요소들 Alpha, editing 까지 재사용 될 수 있다

prepareForReuse() 호출 시점을 잘 보자

스크롤을 빠르게 내릴 때 올바른 이미지가 들어가지 않는 문제도 prepareForReuse를 통해 해결이 가능하다

import UIKit

class MovieCardCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var movieCardView: MovieCardView!
    
    
    override func prepareForReuse() {
        super.prepareForReuse()

        movieCardView.contentLabel.text = "Being Ready"
    }
}

즉 이러한 문제점들은 위와 같은 코드로 셀의 뷰 측면의 속성을 초기화 시켜주면 해결 가능하다 

그럼 dequeReusableIdentifier는 왜 쓰냐 지금은 셀의 양이 적어서 그렇지만 셀이 무수히 많은 쇼핑 플랫폼이나 데이터를 수만개 씩 다루는 App에서는 셀 하나하나 다 초기화 시켜주면서 사용하기엔 메모리 사용량 측면에서 옳지 않은 설계 방법이다(무수한 배터리 사용의 요청)

적절하게 deque과정과 prepareForReuse를 사용해주자

 


AwakeFromNib

AwakeFromNib은 App 실행을 해보면 처음에 한번 호출된 후 Cell이 재사용 될 때 호출이 되지 않는 것을 볼 수 있다 

App 사용자들에게는 보이지 않겠지만 메모리의 관점에서는 Cell의 UI(backgroundColor, font, titleColor)는 Cell의 디자인이 변하지 않는 상황이라면 Cell이 재사용 될 때 마다 호출될 필요가 없다

이전 포스팅에서 Cell의 디자인이 변하지 않기 때문에 UI는 AwakeFromNib에서 처리 해주었다 (예시)

class MovieCardCollectionViewCell: UICollectionViewCell {
    
    static let identifier = "MovieCardCollectionViewCell"

    @IBOutlet weak var movieCardView: MovieCardView!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
        setupUI()
    }
    
    func setupUI() {
        movieCardView.backgroundColor = .clear
        movieCardView.posterImageView.backgroundColor = .lightGray
    }
    

}

 

'Tech > iOS' 카테고리의 다른 글

[iOS]Day39 - Authorization - Camera  (0) 2022.08.12
[iOS]Day38 - Privacy  (0) 2022.08.11
[iOS]Day37 - TableView+CollectionView  (0) 2022.08.09
[iOS]Day37 - IBInspectable/IBDesignable  (0) 2022.08.09
[iOS]Day36 - AutomaticDimenssion  (0) 2022.08.08