2011-08-18 2 views

답변

4

일반적인 UIViewController 코드를 작성하는 경우 iOS의 스레드 안전성에 대해 걱정할 필요가 없습니다. iOS에서는 UI에 관한 메시지가 주 스레드에서 실행 중이어야합니다.

자기 자신이 백그라운드에서 일부 메시지를 수행하지 않으면 일반적으로 스레드에 대해 걱정할 필요가 없습니다. 대부분의 경우 스레드는 항상 주 스레드에 있습니다.

P. Game Kit와 같은 일부 프레임 워크는 백그라운드에서 메시지를 수행하지만 UI와 관련이 없으며 Apple의 문서는 메시지가 주 스레드에서 실행 중인지 확인하도록 경고합니다.

+0

일부 도면 코드는 멀티 코어 CPU에서 실행될 때 CATiledLayer와 같이 멀티 스레드입니다. –

9

concurrency programming guide이 좋습니다. 다음은 몇 가지 중요한 사항을 명심하십시오.

- 메인 스레드에서만 UI를 업데이트해야합니다. 이것은 미묘한 방법으로 당신을 얻을 수 있습니다 ...

- NSNotifications는 그들이 해고 된 스레드에서 받게됩니다. 따라서 스레드를 시작하고 NSNotification에 가입하여 UI 작업을 트리거하는 경우 가져온 스레드가 무엇인지 확인해야합니다. 주 스레드에 없으면 NSObject의 performSelectorOnMainThread : withObject : waitUntilDone :을 사용하여 주 스레드에서 가져옵니다.

- UI가 아닌 컨텍스트로 드로잉을한다면 핵심 그래픽이 이제 스레드로부터 안전하다고 믿습니다. (저는 CATiledLayer가 이것 때문에 약간의 영리한 일들을한다고 생각합니다)

- 일반적으로 뷰 컨트롤러의 경우, 메인 스레드의 이벤트 루프 만 생각하면됩니다. 다른 스레드에서 자신의 이벤트 루프를 만들기 전에 두 번 생각하십시오.

+0

확인하려면 Core Graphics는 스레드로부터 안전하며 CATiledLayer는 다중 백그라운드 스레드 (단일 코어 CPU를 사용하는 경우 하나의 백그라운드 스레드 만)에서 모두 그릴 수 있습니다. –

관련 문제