Thumbnail
BEST 개발 · 프로그래밍 모바일 앱 개발
iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
(5.0)
16개의 수강평 ∙ 175명의 수강생

55,000원

지식공유자 : 앨런(Allen)
총 32개 수업˙총 8시간 9분
평생 무제한 수강
수료증 발급 강의
입문 초급 대상 중급이상
내 목록 추가 223 공유
앨런(Allen) 프로필
왜 UI를 메인쓰레드에서 업데이트 할까?
앨런(Allen) 9달 전

안녕하세요. 오랜만에 새소식으로 인사드리네요.

다름이 아니오라,

왜 UI를 메인쓰레드에서 업데이트 해야할까? 라는 질문에 대한 좋은 글이 있어, 해석본을 만들게 되었고 공유해 드리려고 합니다.

혹시나 좋은 참고 자료가 되었으면 합니다.

(글의 원본 출처)

https://medium.com/@duwei199714/ios-why-the-ui-need-to-be-updated-on-main-thread-fd0fef070e7f

(해석본 pdf자료)

https://drive.google.com/file/d/1dFw6sJsxV-huK3BoHXgDq-7rXy9yBq9l/view?usp=sharing

간단하게 요약해 드리자면,

1) UIKit의 모든 속성을 Thread-safe하게 설계하면, 느려짐과 같은 성능저하가 발생할 수 있기 때문에 그렇게 설계할 수 없다. (Thread-safe하지 않게 설계한 것은 애플의 의도다.)

2) 메인 런루프(Runloop)가 뷰의 업데이트를 관리하는 View Drawing Cycle을 통해 뷰를 동시에 업데이트 하는 그런 설계를 통해 동작하고 있는데, (메인쓰레드가 아닌)백그라운드 쓰레드가 각자의 런루프로 그런 동작을 하게되었을때, 뷰가 제멋대로 동작할 수있다. (예를  들어, 기기를 회전 했을때, 동시에 뷰의 레이아웃이 재배치되는 그런 동작을 못하게 될 수도 있다.)

3) iOS가 그림의 그리는 렌더링 프로세스(코어애니메이션 -> 렌더서버 -> GPU -> 표시)가 있는데, 여러 쓰레드에서 각자의 뷰의 변경사항 GPU로 보내면 GPU는 각각의 정보를 다 해석해야하니 느려지거나, 비효율적이 될 수 있다.

4) Texture나 ComponentKit이라는 페이스북에서 개발한 비동기적 UI 프레임워크가 있긴 하지만, View Drawing Cycle가 유사한 방식으로 적절한 타이밍에 메인 쓰레드에서 동시에 업데이트 하도록 하고 있다.

이정도  내용입니다. 사실, iOS뿐만 아니라 윈도우나 다른 OS에서도 마찬가지로 이런 위의 유사한 여러가지 이유때문에 구조적으로 메인쓰레드에서만 UI업데이트를 할 수 있도록 하고 있는 것이 아닐까, 다시 생각해보게 하는 글이었습니다.

그냥 한번쯤 생각해 볼 수 있는 주제라.. 조금의 도움이 되시길 바랍니다 ^^

감사합니다.

앨런(Allen) 프로필
안녕하세요. 강의에서 설명을 조금 추가한 부분이 있습니다.^^
앨런(Allen) 11달 전

안녕하세요. 앨런입니다.

우선 iOS동시성 프로그래밍 강의를 수강해주셔서, 감사하다는 말씀을드립니다. :)

최근에.. 질문부분에 두분께서.. 좋은 질문을 올려주셔서,

답변을  드렸고.. 약간의 주석에서  오류가 있는부분.. 그리고 설명을 조금  더 명확히 해드리고자,

해당 부분의 영상을 다시 찍고, 편집하여서 (기존 영상 파일을 대체하여)

업로드해 놓았고, 코드 및 PDF파일도 약간 수정해서  올려놓았기에.. 혹시나 코드나 PDF파일을 다시 다운로드 받으셔도

좋을 것 같아 새소식을 올리게 되었습니다.

(혹시 참고적으로 두분의 질문 및 제 답변을 한번 훑어보셔도 조금  공부에 도움이  되실 듯합니다.^^)

해당부분은 

GCD에서 3.디스패치큐(GCD) 사용시 주의해야할 사항에서

2) sync메서드에 대한 주의 사항. 즉, 현재의 큐(async)에서 현재의 큐(sync)로 보내면 안되는 이유에 관하여

조금 더 명확하게 다룬부분입니다.

(아래는 제가 강의교안 PDF에 추가한 페이지를  이미지로 캡처한 것입니다.)

PDF파일에는 위와 같은 내용을 추가해 놓았고, 참고적으로 보시면 될 것같습니다.

네..  혹시나 추가적으로 설명이 부족하다거나 이해가 잘 되지 않는 부분이 있으시면 언제든지 질문을 올려주시면, 성심성의껏 답변해드리도록  하겠습니다.

언제나 고맙습니다. :)

다른 댓글 보기(1)
앨런(Allen) 프로필
언제든지 편하게 질문을 올려주세요.
앨런(Allen) 2020.02.29

언제든지 편하게 질문을 올려주시면, 성심성의껏 답변을 드리도록 하겠습니다.

고맙습니다. ^^

55,000원

내 목록 추가 223 공유
지식공유자 : 앨런(Allen)
총 32개 수업˙총 8시간 9분
평생 무제한 수강
수료증 발급 강의
입문 초급 대상 중급이상
수강 전 궁금한 점이 있나요?
문의하기
문의
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의를
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스