iphone - 为方法传递 block

标签 iphone objective-c grand-central-dispatch

我想将不同的 block 传递给一个方法。该方法随后将使用传入的 block 作为 dispatch_async 的参数。

我的 block 声明如下:

typedef int (^ComputationBlock)(int);

接受 block 的类方法实现为:

- (void)doSomething:(int)limit withBlock:(ComputationBlock)block;
{

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

   // typical in-lined block for dispatch_async:  
 dispatch_async(queue, ^{
      // do some work here
 });

 // I want to pass in the block as the 2nd parameter to dispatch_async
 // but the compiler will warn me of a type mismatch unless I cast
 // the block like:
 dispatch_async(queue, (dispatch_block_t)block);    
}

@end

可以将“block”参数类型转换为 dispatch_block_t 吗?

最佳答案

不,这样做并不酷——传递给 dispatch_async 的 block 不需要接受任何参数并且不返回任何内容。将您的 ComputationBlock 转换到那将是一个坏主意(愚弄大自然是不好的)。

只需将要调用的 block 包装在正确的类型之一中:

 dispatch_async(queue, ^{ block(0); } );    

(请注意,您还需要在调用 ComputationBlock 时为其提供参数。)

关于iphone - 为方法传递 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621582/

相关文章:

jQuery $.live() 不适用于 iPhone 上的表格行

ios - 刷新 UITableView 的内容会卡住应用程序

iphone - 获取苹果蓝牙设备的名称 "External Accessory framework"

iphone - 自定义 segue 推像后退按钮

ios - 在导航到另一个 View Controller 之前切换标签栏

ios - 使用全局托管对象上下文来支持并发

iphone - 文件属性 NSFileModificationDate 返回 iPad 应用程序中预期时间后 5 小时的时间

android - Android上的任务队列就像iOS上的GCD一样?

objective-c - 为 dispatch_queue_t 属性调用 getter 会导致崩溃

iphone - IOS:应用程序关闭或进入后台时保存数组