1

在我的 NSOperation 子类中,我在子类方法中的长循环顶部或任何长方法(核心数据提取、数组排序等)之前检查取消main。请参阅下面的示例。

-(void)main{

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    for( int i=0; i< 100; i++ )
    {
         //Check for cancellation
         if( [self isCancelled] ){
             [pool drain];
             return;
         }

    //Do the work
    }

    [pool drain];
}

除了排干游泳池并尽快退出该方法之外,我还应该做些什么吗?

4

1 回答 1

2

1) 优雅退出

2) 适当地通知听众/代表。如果您有委托,您将需要提供支持多种操作结果(成功、失败或错误、取消、超时)的回调或接口/协议。您的听众不一定是调用取消的对象,但他们可能对如何处理这种情况有更好的了解。

3)清理你的对象的状态——例如,释放和零对象,这些对象应该是程序不可访问的,并确保任何调用都将检查isCancelled操作是否在多线程上下文中运行。

于 2010-11-07T13:42:57.680 回答