Daily iOS
메모리·ARC

unowned 크래시 시나리오

UITableView 셀에서 이미지를 비동기로 싣는 아래 코드는 가끔 크래시합니다. 어떤 조건에서, 왜 크래시하나요?

final class ImageCell: UITableViewCell {
    func load(_ url: URL) {
        loader.fetch(url) { [unowned self] image in
            self.imageView?.image = image
        }
    }
}
면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
짧은 답 보기

네트워크 응답이 오기 전에 셀이 해제되면(테이블 뷰가 셀을 버리거나 화면이 닫힘) unowned self가 이미 죽은 객체를 가리켜 접근하는 순간 트랩이 난다. 클로저 수명이 self보다 길 수 있는데 unowned는 그 반대를 전제한 것이다.

받은 질문 공유