나는 직면하고있는 상황에 대해 작은 의문을 가지고 있습니다. asyncTaskFinished
라는 콜백이 단지 배경 작업입니다콜백 = 동시성으로 선택기를 수행 하시겠습니까?
- (void)firstSelector {
[self launchAsyncTask];
... do some work for a long time (10secs) ...
}
- (void)asyncTaskFinished {
... some work after 5secs of async task ...
}
firstSelector
수행 launchAsyncTask
: 나는 2 가지 방법이있다. 비동기 작업을 시작한 후 특정 시간 동안 firstSelector
이 실행되고 (10 초라고 가정) 비동기 작업이 5 초 동안 실행된다고 가정하면 동시성 문제가 발생합니까?
어떻게 작동합니까? asyncTaskFinished
이 firstSelector
뒤에 실행되거나 firstSelector
이 일시 중지되어 asyncTaskFinished
을 실행합니까?
실행 루프가있는 링크가 있습니까? 메소드를 큐에 추가 한 다음 호출 할 때 실행됩니까?
은 내가 잃었어요 :)
감사합니다.
문서를 읽었습니까? http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html? 나는 당신이 어떤 특별한 질문을 할 때까지 모든 것을 설명한다고 믿습니다. –
내 콜백이 주 스레드 실행 루프를 사용하여 대기 중임을 이해하지만 firstSelector는 어떻습니까? 나는 표준 "[self firstSelector];"를 사용하여 그것을 수행한다. 그것은 또한이 방법으로 대기 중입니까? –
'콜백'은 일반적으로 주 '작업'과 동일한 스레드에서 시작됩니다. 주 스레드뿐만 아니라 모든 스레드가 될 수 있습니다.토론 할 코드가 없으므로 detached 스레드에서'firstSelector'가 호출되고'launchAsyncTask'가 또 다른 백그라운드 스레드를 생성하는 것이 일반적으로 가능합니다. 또는 둘 모두에 대해 동일한 주/분리 스레드 일 수 있으며, 그 중 하나는 분리 된 스레드의 주 스레드와 다른 스레드에 있습니다. 메인 스레드에서 항상 콜백을 시작하기로 결정할 수도 있습니다. 그것은 모두 디자인에 의해 주도되며 항상 각 시나리오가 다르기 때문에 잘 문서화되어야합니다. –