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]。我不知道有什么更简洁的方法来执行块数组。