Ios 执行块数组的惯用方法
我有一个可以执行任意更新队列的对象。我使用块来体现更新。我使用我的Ios 执行块数组的惯用方法,ios,objective-c,objective-c-blocks,grand-central-dispatch,Ios,Objective C,Objective C Blocks,Grand Central Dispatch,我有一个可以执行任意更新队列的对象。我使用块来体现更新。我使用我的addUpdate:方法添加更新 - (void) addUpdate: (void(^)())block { [self.updates addObject: block]; } 稍后,我想执行所有这些。我不在乎它们是否同时运行。基本的原始方式似乎是这样的: for (NSUInteger index = 0; index < self.updates.count; index++) { void (^b
addUpdate:
方法添加更新
- (void) addUpdate: (void(^)())block {
[self.updates addObject: block];
}
稍后,我想执行所有这些。我不在乎它们是否同时运行。基本的原始方式似乎是这样的:
for (NSUInteger index = 0; index < self.updates.count; index++) {
void (^block)() = self.updates[index];
block();
}
或者我应该用GCD做些什么来实现这一点 对于非并发执行,因为in是一种方式。对于并发执行,您可以使用NSArray的-enumerateUsing。。。方法并传递并发标志,或者使用dispatch_apply()代替循环。用于非并发执行,因为in是一种方法。对于并发执行,您可以使用NSArray的-enumerateUsing。。。方法并传递并发标志,或者使用dispatch_apply()代替循环。我能想到的最简洁的方法是:
[self.updates makeObjectsPerformSelector: @selector(invoke)];
这句话的“惯用”程度可能取决于具体情况
编辑:这取决于块在运行时作为Objective-C对象实现,并响应选择器
-invoke
。换句话说,表达式block()代码>也可以表示为[block invoke]代码>。我不知道还有什么更简洁的方法来执行块数组。我能想到的最简洁的方法是:
[self.updates makeObjectsPerformSelector: @selector(invoke)];
这句话的“惯用”程度可能取决于具体情况
编辑:这取决于块在运行时作为Objective-C对象实现,并响应选择器-invoke
。换句话说,表达式block()代码>也可以表示为[block invoke]代码>。我不知道还有什么更简洁的方法来执行块数组。我认为NSOperation
更适合这种情况。这是一个非常古老的问题,出于历史利益!注意Brad在评论中的优秀示例程序我认为NSOperation
更适合这种情况。这是一个非常古老的问题,出于历史利益!请注意Brad在评论中的优秀示例程序mmmm。。。本主题是关于块而不是选择器的。块在运行时作为Objective-C对象实现,并响应选择器-invoke
。换句话说,表达式block()代码>也可以表示为[block invoke]代码>。我不知道还有什么更简洁的方法来执行块数组。嗯。。。本主题是关于块而不是选择器的。块在运行时作为Objective-C对象实现,并响应选择器-invoke
。换句话说,表达式block()代码>也可以表示为[block invoke]代码>。我不知道有什么更简洁的方法来执行块数组。