2010-02-09 2 views
1

일부 iPhone 개발을하고 있으며 하위 클래스가 UIViewController 인 것으로 가정합니다. 이 뷰 컨트롤러에 이 있고 에 생성되고 dealloc에 릴리스 된 것으로 가정합니다.NSInvocationOperation이 뷰 컨트롤러에서 시작되어 뷰 컨트롤러가 삭제 되었습니까?

이보기 컨트롤러가 살아있는 동안 어떤 점에서 NSOperationQueueNSInvocationOperation을 추가하고 작업 큐가 백그라운드에서 실행하기 시작한다고 가정합니다. 실행 중 View Controller가 닫힙니다.

NSInvocationOperation 실행은 어떻게됩니까? 계속해서 실행하고 뷰 컨트롤러가 해제되지 않도록 할 수 있습니까? 뷰 컨트롤러

예 코드 : 착신되는 시점 [self finished] 의해 상기 실시 예에 따라서

- (void)synchronousDoSoemthing 
{ 
    [NSThread sleepForTimeInterval:1000.0]; 
    [self finished]; 
} 

:

NSInvocationOperation *operationDoSomething = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(synchronousDoSomething:) object:nil]; 
[_operationQueue addOperation:operationDoSomething]; 
[operationDoSomething release]; 

다음이 내보기 컨트롤러 다른 함수 보기 컨트롤러가 탐색 컨트롤러에서 튀어 나옵니다.

답변

1

예. 좋지 않습니다. ViewController는오고가는 것이므로 쓰레드를 스패닝하는 리소스를 소유하지 말아야하며 확실히 NSOperationQueue이 아닙니다.

더 나은 방법은 큐를 소유하는 전역 (싱글 톤) 개체를 만드는 것입니다. 그러면 뷰 관리자는 완료된 작업에 대한 메시지를 받기 위해 옵저버로 등록 할 수 있습니다. 또는이 전역 개체가 보내는 알림을 수신하기 만하면됩니다.

+0

감사합니다. 응답을 기다리는 동안 모델에 내 논리를 옮겨서 (문제가 발생 했음) 문제를 해결했습니다. 그러나 나는 여기에서도 대답을 원했다. – marcc

관련 문제