Thread safe
하지 않기 때문이다.
이는 UI 요소가 오직 메인 스레드에서만 안전하게 접근되고 수정될 수 있음을 의미함
Thread safe 과 Race Condition
Thread safe 하다는것은 Race Condition 이 발생하지 않는다는뜻이다.
RaceCondition 이란, 한 값에 여러 스레드가 동시에 접근함을 뜻한다.
UI작업을 꼭 메인 스레드에서 작업해야하는 이유는 메인 스레드에는 Main RunLoop가 동작하고 있기 때문이다.
메인 스레드에서는 RunLoop가 일정한 주기를 유지하며 계속 동작하고 있다.
이 주기에 맞추어서 사용자의 입력을 받아서 UI를 그리게 된다.
이러한 주기를 View Drawing Cycle
이라고 한다.
모든 스레드의 RunLoop에 따라 각자가 UI를 그리게 된다면 UI가 그려지는 시점이 모두 제각각이 되면, 그렇게 되면 비효율적일 뿐더러 Race Condition
이 발생하게 된다.
즉 어느 스레드에서 언제 업데이트 할지도 모르고 동일한 text값이나 뷰에 대해서 서로 동시에 접근하게 되면 어떻게 변화시켜야하는지에 대해서 race condition이 발생하기 때문이다.
따라서 Main에서만 업데이트 해주어야한다.
런루프는 두개의 일을 한다.
스레드를 생성할때 자동으로 생성되지 않기 때문에, Thread.current
를 하게되면 런루프가 존재하면 가져오고, 없음 생성하게된다.
하지만 위에서 설명했듯, 런루프는 한번의 실행동안, 이벤트 input과 timer를 확인하고 해당 이벤트를 수행하게 된다.
이를 프로그래머가 명시적으로 실행해줘야한다.
Main Thread 에서 UI를 업데이트 해줘야만 하는 이유는 Thread safe
하지 않고, 메인 스레드에는 Main RunLoop가 동작하고 있기 때문이다.