일어나라 두한아 아니 멍청아..
오늘은 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 |