我一直在尋找一些具體的場景,當iPhone上的NSOperation
是一個理想的工具在應用程序中使用。據我的理解,這是一個圍繞你自己的threaded
代碼的封裝。我還沒有看到任何蘋果演示應用程序使用它,我想知道如果我錯過了一個偉大的工具,而不是使用NSThread
。NS操作iPhone
這裏的理想解決方案是描述NSOperation
的用例場景以及如何使用它來解決您的問題。
我一直在尋找一些具體的場景,當iPhone上的NSOperation
是一個理想的工具在應用程序中使用。據我的理解,這是一個圍繞你自己的threaded
代碼的封裝。我還沒有看到任何蘋果演示應用程序使用它,我想知道如果我錯過了一個偉大的工具,而不是使用NSThread
。NS操作iPhone
這裏的理想解決方案是描述NSOperation
的用例場景以及如何使用它來解決您的問題。
可可是我的女朋友有good tutorial使用NSOperation
和NSOperationQueue
。本教程利用NSOperation
在不同的線程中同時下載幾個網頁。
另外,參見Mac Research的this article。
一句話:NSOperationQueue
NSOperationQueue
是線程安全的(你可以從不同的線程添加進行操作即可,而不需要鎖),使您能夠鏈NSOP對象在一起。
我的Flickr iPhone應用程序Reflections使用NSOperation
和NSOperationQueue
廣泛地管理下載圖像和XML
。
警告:確保您閱讀,重新閱讀並瞭解文檔在討論「併發性」時的含義。
實際上,它不是*真正*線程安全的,它在Mac OS X 10.5上有問題,請參閱http://www.mikeash.com儘管他們提到iPhone似乎是免疫的,因爲單核心處理器 – nduplessis 2009-05-07 08:52:11
我在我的iPhone應用程序中使用它的方式是基本上在我的應用程序委託中創建一個NSOperationQueue成員,並通過屬性使其可用。然後,每當我需要在後臺運行某些內容時下載一些XML我會創建一個NSInvocationOperation並將其發送到隊列。
NSInvocationOperation *operationToPerform = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(updateXML) object:nil];
[[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] sharedOperationQueue] addOperation:operationToPerform];
[op release];
你也應該看看這個網址: http://developer.apple.com/cocoa/managingconcurrency.html
所有以上這些答案都是偉大的,但請務必閱讀上面的文章,並自由使用這行代碼中的:
if (self.isCancelled) return;
Coca提供的樣本中沒有使用該行,這是我的女朋友,直到我從現場崩潰登錄後,才意識到這是一個問題/概念。
這裏只是一個非常簡單的實現,但需要時間來閱讀教程,完全明白了一切:
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(methodToCall)
object:objectToPassToMethod];
[queue addOperation:operation];
我用它異步處理。這是從Web服務獲取數據或協調需要大量時間運行的操作的最佳方式。因爲它們是線程安全的,異步的(不會捆綁主線程),並且它們支持依賴關係,所以它們對於您的工具集來說是非常棒的工具。
依賴性允許您進行多個獨立的操作,並確保以特定順序執行併成功或出錯。當你需要同步一堆數據時,這非常棒,但在同步子對象之前需要父對象進行同步。
,你可以嘗試使用雨燕
let operation : NSOperation = NSOperation()
operation.completionBlock = {
println("Completed")
}
let operationQueue = NSOperationQueue.mainQueue()
operationQueue.addOperation(operation)
樣品您可能要考慮選擇這些優秀的答案,作爲解決方案之一。 (: – corydoras 2009-12-16 03:21:19