2013-06-07 7 views
1

백그라운드 스레드에서 선택기를 실행하고 있는데 주 스레드를 호출해야하지만 완벽하게 작동하지만 백그라운드에서 실행되는 선택기가 많을 때 시도해 봅니다. 주 스레드에서 셀렉터를 호출하는 경우가 있는데, 가끔 호출되는 경우가 있습니다. 나는 NSLog()로 인쇄하기 때문에 코드가 거기에 도착하는 것을 볼 수있다; 나는 배경에 선택 호출 방법perfomSelectorOnMainThread : withObject : waitUntilDone : 무작위로 작동을 멈 춥니 다.

이입니다

NSOperationQueue *queue = [NSOperationQueue new]; 
NSInvocationOperation *operation = [[NSInvocationOperation alloc] 
             initWithTarget:self 
             selector:@selector(getPath:) 
             object:datos]; 
[queue addOperation:operation]; 
[operation release]; 

을 그리고 이것은 배경 방법은 메인 쓰레드 메소드를 호출하는 방법입니다

NSLog(@"Arrives here"); 
[self performSelectorOnMainThread:@selector(setPath:) withObject:array waitUntilDone:YES]; 

는 왜 가끔 작동합니까, 그리고 때로는 그렇지 않니?

답변

0

어떻게 작동하지 않는 것을 알고 계십니까?

메인 스레드를 차단하는 것이 있습니까? 기회 당 모달 세션?

"백그라운드에서 실행되는 많은 선택기"는 무서운 것으로 들립니다. un-throttled 병행 성은 오답이라고 확신합니다. 이벤트가 삭제되는 것처럼 보이는 많은 노이즈로 메인 이벤트 루프를 폭풍처럼 부르는 시스템을 만드는 것은 매우 쉽습니다.

+0

나는 그것을 고쳤으며, 실제로 호출되지 않았다. 나는 왜 그런지 모르지만 나는 이렇게했다 : 'dispatch_queue_t queue = dispatch_queue_create (@ "some_name", NULL); dispatch_async (큐^{// 무거운 코드 여기^{// 무거운 코드)} 을 수행 dispatch_async (dispatch_get_main_queue() 진행하고 을}); dispatch_release (대기열); –