我有2個AFNetoworking操作獲取數據,並且我有一個方法需要完成兩個任務。我已經在互聯網上讀過,我可以有一個NSOperationQueue使1操作依賴於另一個操作完成。雖然這在某些情況下似乎是一個很好的解決方案,但如果我的代碼不適合作爲NSOperation,它似乎很難。如何執行需要完成2個異步任務的操作
例如(出於說明的目的) 1. API調用A獲得的圖像A 2. API調用B獲得另一圖像B 3. maskImage功能掩模圖像B到甲
任何見解將是有幫助!
我有2個AFNetoworking操作獲取數據,並且我有一個方法需要完成兩個任務。我已經在互聯網上讀過,我可以有一個NSOperationQueue使1操作依賴於另一個操作完成。雖然這在某些情況下似乎是一個很好的解決方案,但如果我的代碼不適合作爲NSOperation,它似乎很難。如何執行需要完成2個異步任務的操作
例如(出於說明的目的) 1. API調用A獲得的圖像A 2. API調用B獲得另一圖像B 3. maskImage功能掩模圖像B到甲
任何見解將是有幫助!
我不確定你認爲什麼樣的代碼不適合NSOperation
,但我想知道你是否使用NSOperation
是因爲希望避免編寫自己的NSOperation
子類。幸運的是,使用操作隊列比這更簡單。您可以使用NSBlockOperation
或NSInvocationOperation
快速創建操作。
我通常會用一個NSBlockOperation
:
NSOperation *completionOperation = [NSBlockOperation blockOperationWithBlock:^{
// do my image processing
[self applyMaskToImage];
}];
或者你可以使用一個NSInvocationOperation
:
NSOperation *completionOperation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(applyMaskToImage)
object:nil];
然後,您可以(a)召喚addDependency
爲每個兩種下載操作,使completionOperation
依賴於兩者;和(b)將completionOperation
添加到您自己的隊列中。
謝謝!每天學些新東西。 – jfisk
你爲什麼說你的代碼不適合NSOperation?另外,你是不是不必要地使事情複雜化?只有幾個標誌就足夠了,不是嗎? – Mar0ux
爲什麼這不適合'NSOperation'?我只是做一個簡單的'NSOperation * completionOperation = [NSBlockOperation operationWithBlock:^ {...}];'然後添加您的依賴關係到該操作。這看起來就像是適合'NSOperation'的東西(你當然不希望在主隊列上進行復雜的圖像處理)。 – Rob
@Rob NSBlockOperation看起來不錯,不知道它存在。 – jfisk