NSOperation取消操作
對于一個自定義NSOperation來說,想要取消操作腿时,除了需要向其發(fā)送cancel消息之外况脆,還必須手動實現(xiàn)某些方法。
/*
start和main方法中批糟,都必須周期性的對cancelled屬性進行判斷格了,如果YES,則立即退出當(dāng)前徽鼎,終止操作盛末。
其中弹惦,start方法中的判斷使得尚未開始的操作及時退出;
main方法中的判斷使得正在執(zhí)行當(dāng)中的操作退出悄但。
*/
start--檢查是否取消-->main--檢查是否取消
取消方式:
取消
單一
操作:cancel / NSOperation
取消
隊列中
的操作:cancelAllOperations / NSOperationQueue
取消正在執(zhí)行的操作:需要在
main
方法中周期性的檢查cancelled
狀態(tài)棠隐。
/**
在合適的時機檢查cancelled狀態(tài),退出當(dāng)前任務(wù).
三個切入點:
1. 開始執(zhí)行任務(wù)之前
2. 每個for循環(huán)中
3. 階段性的任務(wù)之間
*/
- (void)main
{
// 正式開始執(zhí)行任務(wù)之前檢查
if (self.isCancelled) {
return;
}
for (int i = 0; i < 10; i++) {
// 每個循環(huán)開始之前檢查
if (self.isCancelled) {
NSLog(@"退出當(dāng)前任務(wù)");
return;
}
// 一個漫長的任務(wù)
}
// 階段性任務(wù)之間檢查
[self processLongTask];
}
- 取消位于隊列中
等待執(zhí)行
的操作:start
方法的默認(rèn)實現(xiàn)會檢查cancelled
狀態(tài)檐嚣,如果為YES助泽,則立即退出,不會調(diào)用main
方法嚎京。