我有一个可以执行任意更新队列的对象。我使用块来体现更新。我使用addUpdate:
方法添加更新。
- (void) addUpdate: (void(^)())block {
[self.updates addObject: block];
}
后来,我想执行所有这些。我不在乎它们是否同时运行。基本的原始方式似乎是:
for (NSUInteger index = 0; index < self.updates.count; index++) {
void (^block)() = self.updates[index];
block();
}
或快速枚举
for (void (^block)() in self.updates) {
block();
}
或者我是否应该采用GCD来实现这一目标?
答案 0 :(得分:4)
我能想到的最简洁的方法是:
[self.updates makeObjectsPerformSelector: @selector(invoke)];
“惯用语”如何可能与情况有关...
编辑:这取决于块在运行时作为Objective-C对象实现的事实,并响应选择器-invoke
。换句话说,表达式block();
也可以表示为[block invoke];
。我不知道有任何更简洁的方法来执行一个块数组。
答案 1 :(得分:2)
对于非并发执行,for-in是可行的方法。对于并发执行,您可以使用NSArray的-enumerateUsing ...方法并传递并发标志,或使用dispatch_apply()而不是循环。