void(^)(NSData *)是什么意思?

时间:2013-03-07 09:21:15

标签: ios objective-c xcode ios5

您好我正在使用此library,我找到了函数:

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

我尝试传递一个简单的NSData *data;并抛出错误,真正意味着(void(^)(NSData*))?这是我第一次看到它。

非常感谢。

3 个答案:

答案 0 :(得分:11)

(void(^)(NSData*))声明代码块。 你可以这样调用你的功能。

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

data是您的块的参数,您可以使用它。当queueRequest以异步方式完成时,将调用该块。

答案 1 :(得分:4)

接口是异步的,这意味着数据将在以后的某个时间可用。这意味着该方法不能简单地返回NSData*(不会一直阻塞,这是不切实际的)。现在问题经常用blocks来解决,这里的完成参数是一个带有NSData*参数并返回void的块。这就是你如何称呼这种方法:

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

调用将立即返回,并且当数据可用时,块将在稍后执行。

答案 2 :(得分:1)

它是一个接受NSData对象的块,因为它是唯一的参数并且不返回任何内容。

请参阅Apple的Blocks Programming Topics