인프런 커뮤니티 질문&답변

seonjukim님의 프로필 이미지

작성한 질문수

야곰의 iOS 프로그래밍

예제 함께하기 - 나만의 테이블뷰 셀 구현하기

configure 메소드의 DispatchQueue.main

작성

·

207

0

디스패치큐와 메인스레드에 대해 질문이 있습니다 🥲

 

Request.swift

image 메소드 구현부에서 DispatchQueue.main.async { completion(image) }로 메인스레드에서 클로저를 실행하도록 만들어주었었는데

 

FriendTableViewCell.swift

configure 메소드 내부의Request.image 메소드 호출부를 보면 completion 클로저에서도 또 메인스레드를 부르게 되어있어서

 

아래처럼 같은 일(메인스레드 부르는 일)을 중복으로 하게 되는 게 아닌지 궁금합니다! 제가 이해한 게 맞다면 이렇게 만들어주어야 하는 이유가 있을까요?

 

DispatchQueue.main.async {

    DispatchQueue.main.async {

        guard let cell: FriendTableViewCell = tableView.cellForRow(at: indexPath) as? FriendTableViewCell else {

            return

        }

        

        cell.profileImageView.image = image

    }

}

답변 1

0

yagom님의 프로필 이미지
yagom
지식공유자

안녕하세요 선주님!

 

중복을 부러 만드는 것은 아닙니다.

저렇게 중복하지 않게 코드를 다듬으면 더 좋아요.

다만, UI 표현 부분을 메인 스레드(DispatchQueu.main)에서 실행하지 않고 어딘가 다른 백그라운드 스레드에서 실행하면 문제가 발생하기 때문에, UI 관련한 부분은 메인 스레드에서 동작할 수 있도록 미리 대비를 해두는거예요.

저렇게 중복해도 문제가 발생할 여지가 적기에 그렇게 하는 것이지, 완전 좋은 방법은 아닙니다 :)

seonjukim님의 프로필 이미지
seonjukim
질문자

여러 예외상황을 대비한 거였군용 감사합니다! ☺️