2013-03-07 116 views
4

嗨,我使用这个library,我发现功能:void(^)(NSData *)是什么意思?

- (void) queueRequest:(NSString*)urlPath completion:(void(^)(NSData*))completionWithDownloadedData; 

我试图通过一个简单的NSData *data;,它抛出一个错误,是什么真正的意思(void(^)(NSData*))?这是我第一次看到它。

非常感谢。

回答

11

(void(^)(NSData*))声明一个代码块。 你可以这样调用你的函数。

[obj queueRequest:urlPath completion:^(NSData* data){ 
      /* some code */ 
     }]; 

data是你的块,您可以与工作参数。该队列将在队列请求异步完成时调用。

+0

感谢您的帮助! :) – 2013-03-07 09:33:39

4

该接口是异步的,这意味着数据将在稍后的一段时间才可用。这意味着该方法不能简单地返回NSData*(一直没有阻塞,这是不切实际的)。现在的问题通常通过blocks来解决,并且此处的完成参数是一个块,其参数为NSData*并返回void。这是你如何把这样的方法:

[foo queueRequest:path completion:^(NSData *receivedData) { 
    NSLog(@"Received data: %@", receivedData); 
}]; 

呼叫将立即返回,块将被执行一段时间后,当数据是可用的。

+0

感谢您的解释! – 2013-03-07 09:33:05