我已經設置了一個操作隊列和一個調用操作。我是否需要表示調用已完成?如果不是,操作隊列將如何知道調用已完成並轉到下一個?操作隊列一次設置爲執行一個操作。正確使用NSInvocationOperation和NSOperationQueue
0
A
回答
3
不,不需要表示調用已完成。 NSOperationQueue知道當其isFinished
屬性設置爲YES時,操作完成。當操作的-main
方法返回時,默認情況下會發生這種情況。
NSInvocationOperation的-main
方法,對於所有意圖和目的,只是調用其NSInvocation並返回,所以它的isFinished
標誌應在調用完成後立即設置爲YES。
1
文,
好像你真的想在這裏是自己的子類的NSOperation,並調用它內部的異步。當異步代碼完成並獲得回調時,您將通過正在執行並已更新的KVO通知隊列。中對此有詳細得多了戴夫Dribin的博客中解釋:
http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/
0
這是自動的NSInvocationOperation。你已經很好走了。
如果您需要告訴應用的其他部分操作已完成,您可以使用通知。確保通知進入正確的線程。在iPhone上,我將它們發送到主線程,因爲我經常更改UI以響應通知,並且所有UI的內容都必須在主線程上發生。
[self performSelectorOnMainThread:@selector(postOpDoneNote) withObject:nil waitUntilDone:NO];
-(void) postOpDoneNote
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"someOpDone" object:self];
}
相關問題
- 1. iPhone上的Objective-C - 使用NSOperationQueue和NSInvocationOperation
- 2. 在iOS 4(iPhone)上使用NSInvocationOperation(NSOperation)和NSOperationQueue的主要放緩
- 3. 使用NSOperationQueue和塊
- 4. 如何使用NSOperation和NSOperationQueue
- 5. NSInvocationOperation和主線程
- 6. NSInvocationOperation定義使用參數
- 7. NSOperationQueue,記憶和GCD;如何正確實施?
- 8. NSOperationQueue和UITableView
- 9. NSOperationQueue和ASIHTTPRequest
- 10. NSBlockOperation,NSOperationQueue和Blocks
- 11. NSOperationQueue和NSFetchedResultsController
- 12. NSInvocationOperation忽略maxConcurrentOperationCount
- 13. NSInvocationOperation問題
- 14. 正確使用MPI_THREAD_SERIALIZED和pthreads
- 15. 正確使用EnsureSuccessStatusCode和IsSuccessStatusCode
- 16. 正確使用CoreData和MagicalRecord
- 17. 正確使用SVN和CI
- 18. 正確使用ForkManager和Perl?
- 19. 正確使用stop和delay
- 20. 正確使用session_start()和session.cookie_domain
- 21. 正確使用RxSwift和TableView
- 22. 正確使用os.path和os.join
- 23. NSOperation和NSOperationQueue回調
- 24. 使用NSOperationQueue作爲LIFO棧?
- 25. 使用NSOperationQueue在後臺
- 26. GCD和AppleEvents/NSOperationQueue和AppleScript
- 27. 釋放它實現NSOperationQueue和異步對象的正確方法要求
- 28. NSInvocationOperation等效收益
- 29. 如何停止NSInvocationOperation?
- 30. 如何使用以及在何處使用的NSOperation和NSOperationQueue>
我的任務可能需要7秒才能完成(將圖像寫入相機膠捲),所以我不希望太多這樣的內容同時運行,因爲它會使內存過載。在完成圖像保存之前,我應該怎麼做才能使操作無法繼續。圖像保存操作有回調指示圖像已完成保存。 – Boon 2009-08-31 22:12:07
只需使用[theQueue setMaxConcurrentOperationCount:1],一次只能完成一個。 – 2009-09-01 12:01:46