【问题标题】:void(^)(NSData*) what does it mean?void(^)(NSData*) 是什么意思?
【发布时间】:2013-03-07 09:21:14
【问题描述】:
嗨,我正在使用这个library,我找到了这个功能:
- (void) queueRequest:(NSString*)urlPath completion:(void(^)(NSData*))completionWithDownloadedData;
我尝试传递一个简单的NSData *data; 并引发错误,(void(^)(NSData*)) 的真正含义是什么?还是第一次见。
非常感谢。
【问题讨论】:
标签:
ios
objective-c
xcode
ios5
【解决方案1】:
(void(^)(NSData*)) 声明一个代码块。
你可以这样调用你的函数。
[obj queueRequest:urlPath completion:^(NSData* data){
/* some code */
}];
data 是您的块的参数,您可以使用它。当 queueRequest 完成时,该块将被异步调用。
【解决方案2】:
接口是异步的,这意味着数据只能在稍后的某个时间使用。这意味着该方法不能简单地返回NSData*(不一直阻塞,这是不切实际的)。现在这个问题经常用blocks 解决,这里的完成参数是一个接受NSData* 参数并返回void 的块。这就是你如何调用这样的方法:
[foo queueRequest:path completion:^(NSData *receivedData) {
NSLog(@"Received data: %@", receivedData);
}];
调用将立即返回,该块将在稍后数据可用时执行。