我有一個NSOperation運行在NSOperationQueue。 NSOperation下載一些數據並將其解析爲NSDictionary。我如何知道NSOperation何時完成並獲取該字典? 謝謝。NSOperation finished
回答
通常要做的事情是讓NSOperation調用任何對象需要知道操作完成的方法。或者您可以使用NSNotificationCenter來允許各種對象以更分散的方式偵聽更新。或者您可以使用KVO收聽NSOperation的isFinished
屬性。
最好的方法是用一個委託來初始化你的NSOperation。當NSOperation完成他的工作後,他將使用委託方法之一(通過協議聲明)調用委託。
您還可以使用NSOperation
的- (void)setCompletionBlock:
:
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"Doing something...");
}];
[operation setCompletionBlock:^{
NSLog(@"Doing something once the operation has finished...");
}];
[queue addOperation:operation];
更多的細節here。
重要的是要注意,沒有保證(1)何時和(2)在哪個線程上執行完成塊。文檔更詳細地討論了這些問題。當然,完成程序塊在操作完成後執行。不確定的是它執行的確切時刻(順序)。 –
如果需要知道,當操作完成本身就是一個的NSOperation的代碼塊,那麼你可以優雅地建立它們之間的依賴關係處理這個問題:
[laterOp addDependency:downloadAndParseOp];
的laterOp後,才執行downloadAndPareOp已完成。
事實上,我會鼓勵你編寫你的代碼,以便這種方法是可能的。 NSOperations和NSOperationQueue最大的優點之一是它可以輕鬆地協調代碼執行。
下載最大的問題是如果你使用'NSURLSession',那麼你的操作將是異步的。即操作將完成,然後稍後,下載將完成。解決方法:使NSURLSession同步,或者NSOperation子類只在下載完成後設置「isFinished」。 –
- 1. Xcode4「Build Finished」HUD
- 2. Last Image finished fadeIn
- 3. AngularJS ng-include finished
- 4. 從NSOperation添加NSOperation
- 5. NSOperation崩潰isCancelled
- 6. NSOperationQueue INSIDE an NSOperation
- 7. res.send after for eachach have finished executed
- 8. Sass error「Function X finished without @return」
- 9. performSegue on animation finished,what identifier?
- 10. Web Worker - importScripts「on finished」callback
- 11. 的NSOperation與sendAsynchronousRequest completionBlock
- 12. NSOperation子類performSelector
- 13. NSOperation + NSURLConnection
- 14. NSOperationQueue,NSOperation
- 15. NSOperation取消:NSInvocationOperation或NSOperation子類?
- 16. NSOperation和Autorelease池
- 17. NSOperation mainQueue問題
- 18. NSoperation reverse dependencies
- 19. NSURLConnection在NSOperation
- 20. 火,忘了NSOperation
- 21. NSOperation和fwrite(Iphone)
- 22. 的NSOperation和EXC_BAD_ACCESS
- 23. 使NSOperation同步
- 24. NSOperation和SetImage
- 25. NSOperation和NSOperationQueue
- 26. performSelector:withObject:afterDelay:在NSOperation內
- 27. NSOperation性能
- 28. FMDatabase和NSOperation
- 29. NSXMLParser在NSOperation
- 30. NSOperation with repeat option
感謝您的回覆。我認爲這不會起作用,因爲手術是在另一個線程中,但讓我試試這個。 – user635064
沒有問題,因爲你在不同的線程。您的消息將會發送給您的代表。 –