May 13, 2021, TIL (Today I Learned) - TableView, URLSession, 이미지를 로딩해야하는데 유저가 스크롤을 빨리 넘길 때 생기는 문제

Inwoo Hwang·2021년 8월 26일
0
post-thumbnail

수업내용[그룹과제]


학습내용


이미지를 로딩해야하는데 유저가 스크롤을 빨리 넘길 때 생기는 문제!

클로저는 지금 상태를 캡처하게 됨 즉 지금의 상태를 기억해 둔다. 왜냐하면 나중에 실행되더라도 지금의 상태를 기억해야 하기 때문에

클로저는 이미 만들어진다. 그 시점에 모든 것을 기억하고 나중에 자신이 직접 실행될 때 주변에게 상황을 물어보게 된다.

클로저가 나중에 찾을 때 주변 객체가 살아있어야 하기 때문에 주변 객체들의 reference count가 1 올라가 있는다. 구조체라면 reference count가 상관 없기 때문에 복사해서 갖고 있게 된다. 클로저 안에 쓰는 객체가 참조객체라면 reference count를 무조건 하나씩 올리게 된다. 그래서 swift langauge guide가서 보면 강한 참조 순환에 대한 문제를 보면 클로저 얘기가 항상 나오게 된다.

if indexPath.row == 0 {
  URLSession.shared.dataTask(with URL(String: "이미지주소")!) {
    data, response, error in
    let image = UIImage(data: data!)
    DispathQueue.main.async {
      guard let cellIndex = tableView.indexPath(for: cell), // 지금 시점에 물어본 indexPath 그게 바로 cellIndexPath
      	cellIndex == indexPath  else {
          return
        } // 전에 캡처한 indexPath
      cell.customImageView.image = image
    }
  }.resume()
profile
james, the enthusiastic developer

0개의 댓글