2010-11-07 36 views
1

在我的NSOperation子類中,我檢查在長度循環頂部的取消,或在子類的main方法中的任何長度方法(核心數據獲取,數組排序等)之前取消。看下面的例子。NSOperation最佳實踐,迴應取消

-(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]; 
} 

除了排水池和儘快退出方法之外,還有什麼我應該做的嗎?

回答

2

1)優雅退出

2)適當通知監聽者/代表。如果你有一個委託,你會想要提供支持多個操作結果(成功,失敗或錯誤,取消,超時)的回調或接口/協議。你的聽衆不一定是要取消的對象,但他們可能會更好地瞭解如何處理這種情況。

3)清理對象的狀態 - 例如,應該以編程方式不可訪問的釋放和零對象,並確保任何調用將檢查isCancelled操作是否在多線程上下文中操作。