작성
·
213
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
안녕하세요 선주님!
중복을 부러 만드는 것은 아닙니다.
저렇게 중복하지 않게 코드를 다듬으면 더 좋아요.
다만, UI 표현 부분을 메인 스레드(DispatchQueu.main)에서 실행하지 않고 어딘가 다른 백그라운드 스레드에서 실행하면 문제가 발생하기 때문에, UI 관련한 부분은 메인 스레드에서 동작할 수 있도록 미리 대비를 해두는거예요.
저렇게 중복해도 문제가 발생할 여지가 적기에 그렇게 하는 것이지, 완전 좋은 방법은 아닙니다 :)
여러 예외상황을 대비한 거였군용 감사합니다! ☺️