从视图控制器启动的NSInvocationOperation和视图控制器处理?

时间:2010-02-09 23:46:38

标签: iphone cocoa-touch

假设我正在进行一些iPhone开发,并且我有一个UIViewController的子类。并且假设此视图控制器具有NSOperationQueue,该viewDidLoaddealloc中创建并在NSInvocationOperation中发布。

现在假设在此视图控制器处于活动状态的某个时刻,它会向NSOperationQueue添加NSInvocationOperation,并且操作队列开始在后台执行它。当它正在执行时,视图控制器被解雇。

正在运行NSInvocationOperation *operationDoSomething = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(synchronousDoSomething:) object:nil]; [_operationQueue addOperation:operationDoSomething]; [operationDoSomething release]; 会怎样?它可以继续运行并阻止视图控制器被释放吗?

视图控制器中的示例代码:

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

然后这是我的视图控制器中的另一个函数:

[self finished]

因此,在上面的示例中,在调用{{1}}时,视图控制器已从导航控制器中弹出。

1 个答案:

答案 0 :(得分:1)

是的,这不好。由于viewcontrollers是来去的东西,你不应该让它们拥有spwan线程的资源,当然不是NSOperationQueue

更好的方法是创建一个拥有队列的全局(单例)对象。然后,您的viewconroller可以将自己注册为观察者,以接收有关已完成任务的消息。或者只是听取这个全局对象发出的通知。