有沒有辦法模擬dispatch_apply()
塊中的break
語句?如何「突破」dispatch_apply()?
例如,每一個可可API我見過的處理列舉塊有一個「停止」參數:
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger i, BOOL *stop) {
if ([obj isNotVeryNice]) {
*stop = YES; // No more enumerating!
} else {
NSLog(@"%@ at %zu", obj, i);
}
}];
是否有GCD類似的東西?
那麼,這並不完全正確;雖然enumerateObjectsUsingBlock:是順序的,但也有enumerateObjectsWithOptions:usingBlock :.該「選項」參數可用於指示枚舉應該同時發生。 我不確定他們是如何在內部做這件事的,但我想這是使用dispatch_group來完成的,這樣可以實現更直接的控制。 – 2010-06-23 21:53:35
但問題是enumerateObjectsWithOptions:usingBlock:仍然有* stop參數。 – 2010-06-23 21:54:04
支持在dispatch_apply()中停止是合乎邏輯的,但在設計目標中沒有意義。聲明'enumerateObjectsUsingBlock:'上的停止標誌因隱式順序執行而存在是錯誤的;這兩個是完全正交的。 – bbum 2010-06-23 23:23:36