inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해

Concurrency - CustomImageView 질문드립니다.

해결된 질문

182

왈왈234

작성한 질문수 4

1

안녕하세요, Concurrency 부분을 확인하고 있던 중

CustomImageView Class에서 lastImgUrlUsedToLoadImage 라는 프로퍼티가 있는데, 해당 프로퍼티는 왜 존재하는 것인지 궁금합니다!

이런 로직이 있던데, url과 lastImgUrlUsedToLoadImage가 다를 경우가 있나요!?

swift ios

답변 1

1

앨런(Allen)

안녕하세요!

"왈왈234"님.

컬렉션뷰 셀 자체도 class의 인스턴스이고, 또 커스텀이미지뷰도 class로 생성한 인스턴스라서, 결론적으로 셀의 하나하나의 인스턴스에 커스텀이미지뷰의 인스턴스도 할당시킨.. 이런 방식으로 컬렉션뷰가 동작을 합니다.

네, 그런데 여기서 문제는 일반적인 경우에는 별 상관이 없는데.. 만약 다운로드 받는 동안 위아래로 빠르게 스크롤을 해보시면.. 원래 표시하려던 이미지들의 위치가 뒤죽박죽으로 바뀌는 것을 보실 수 있습니다... (즉, 해당부분의 코드를 지우신 다음에 스크롤을 위아래로 해보시면 어떤 현상이 발생하는지 알 수 있습니다 ^^) 

처음 셀을 생성시에는 indexPath를 통해, 하나의 url이 전달이 되는데.. 실제 셀에서 이미지 다운로드하는 작업들은 조금 오래걸리고(비동기적인 동작이기도 하고).. 실제 다운로드가 완료된 시점의 셀의 indexPath의 url과 실제 셀들이 위치한 순간의 url이 달라질 수 있게 되는 것이죠. (컬렉션뷰 셀의 인스턴스는 재사용을 하니까요.)


다시 말씀드리면.. 즉, cell A가 어떤 "주소a"라는 url을 전달받고.. 이미지를 받고 있는 중에 사용자가 스크롤을 하면 cell A는 다시 재사용이 되어서, 새로운 "주소b"를 또 전달받게 될 수 있게 됩니다.. (그리고 컬렉션뷰의 cellForItemAt 데이터소스 관련 메서드는 스크롤 할때마다 반복적으로 실행하는 메서드 이기도 하고요.)

그래서, 단순하게 셀의 재사용으로 인해, url이 바뀌고, 재전달되는 현상을 막기위한 로직이라고 간단하게 생각하셔도 될 것 같습니다. 좋은 답변이 되길 바라며...!

또 궁금한 것들은 질문주세요!

강의를 들어주셔서 고맙습니다. :)

0

왈왈234

감사합니다. 개인적으로 table cell의 reuse 현상 때문이라고 추측은 했지만, 확실한 답을 얻고 싶어 질문드리게 되었습니다. 빠른 답변 감사드립니다!

0

앨런(Allen)

감사합니다 ㅎㅎㅎ 👍🏻👍🏻👍🏻

오퍼레이션 큐 질문

0

147

2

2) 오퍼레이션큐(OperationQueue) 강의 질문입니다

0

153

2

warning 뜸

0

169

1

수업자료 markup 에 대해 궁금합니다!

0

285

1

예제 프로젝트 빌드 실패

0

344

2

serial 큐 질문드립니다.

0

261

1

[7-3.DispatchBarrier] 예제 코드 질문

0

337

1

안녕하세요, GCD 관련 질문드립니다..

0

292

1

main.async 작동 질문(+ vs global(),async)

0

442

1

dismiss 되었을 때 종료질문

0

314

1

'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.

0

511

2

Dependency Protocol 관련

1

376

1

시리얼 큐와 sync 관련

0

477

2

sync이지만 Queue에 넣으면 async로 동작한다는 말의 의미

0

658

1

lazy var 이슈로 생긴 여러 변수들은 어디에 있나요?

0

392

1

global큐에 sync로 작업을 보냈을 때는 터지지 않는 이유가 궁금합니다.

1

518

2

비동기 개념에서 무엇을 return하는 거죠??

0

398

1

안녕하세욤

1

349

1

Barrier 작업 관련 질문입니다.

1

350

1

디스패치 그룹

1

386

1

global async안에 global async를 만들게되면 어떻게 되나요??

2

393

2

동기적 함수를 비동기적 함수로 바꾸는 부분에서 질문 있습니다

1

296

2

비동기오퍼레이션 관련 질문

1

378

1

강의자료는 어디에 있나요?

1

328

1