代码之家  ›  专栏  ›  技术社区  ›  marcc

nsInvocationOperation从视图控制器启动,视图控制器已释放?

  •  1
  • marcc  · 技术社区  · 15 年前

    假设我正在开发iPhone,我有一个子类 UIViewController . 假设这个视图控制器有一个 NSOperationQueue 创建于 viewDidLoad 并释放在 dealloc .

    现在假设在这个视图控制器处于活动状态的某个时刻,它添加了一个 NSInvocationOperation 操作队列 操作队列开始在后台执行。当它执行时,视图控制器被解除。

    跑步会怎么样 n定位操作 ?它是否可以继续运行并阻止释放视图控制器?

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

    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 回复  |  直到 15 年前
        1
  •  1
  •   Stefan Arentz    15 年前

    是的,这不好。因为viewcontroller是来去往往的东西,所以您不应该让它们拥有SPWAN线程的资源,当然也不应该让它们拥有 NSOperationQueue .

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