美文网首页
NSOperation取消操作

NSOperation取消操作

作者: fever105 | 来源:发表于2015-12-18 00:05 被阅读1841次

NSOperation取消操作

对于一个自定义NSOperation来说,想要取消操作,除了需要向其发送cancel消息之外,还必须手动实现某些方法。

/*
start和main方法中,都必须周期性的对cancelled属性进行判断,如果YES,则立即退出当前,终止操作。
其中,start方法中的判断使得尚未开始的操作及时退出;
main方法中的判断使得正在执行当中的操作退出。
*/
start--检查是否取消-->main--检查是否取消
  • 取消方式:

  • 取消单一操作:cancel / NSOperation

  • 取消队列中的操作:cancelAllOperations / NSOperationQueue

  • 取消正在执行的操作:需要在main方法中周期性的检查cancelled状态。

/**
 在合适的时机检查cancelled状态,退出当前任务.
 三个切入点:
 1. 开始执行任务之前
 2. 每个for循环中
 3. 阶段性的任务之间
 */
- (void)main
{
    // 正式开始执行任务之前检查
    if (self.isCancelled) {
        return;
    }
    
    for (int i = 0; i < 10; i++) {
        // 每个循环开始之前检查
        if (self.isCancelled) {
            NSLog(@"退出当前任务");
            return;
        }
        
        // 一个漫长的任务
    }
    
    // 阶段性任务之间检查
    [self processLongTask];
}
  • 取消位于队列中等待执行的操作:start方法的默认实现会检查cancelled状态,如果为YES,则立即退出,不会调用main方法。

相关文章

网友评论

      本文标题:NSOperation取消操作

      本文链接:https://www.haomeiwen.com/subject/hsyphttx.html