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
方法。