4

嗨,我正在使用这个,我找到了这个函数:

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

我尝试传递一个简单的NSData *data;并且它抛出一个错误,这到底是什么意思(void(^)(NSData*))?我是第一次看到它。

非常感谢。

4

3 回答 3

11

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

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

data是你的块的一个参数,你可以使用它。当 queueRequest 完成时,该块将被异步调用。

于 2013-03-07T09:25:54.740 回答
4

该接口是异步的,这意味着数据仅在稍后的某个时间可用。这意味着该方法不能简单地返回NSData*(不一直阻塞,这是不切实际的)。现在这个问题经常用来解决,这里的完成参数是一个接受NSData*参数并返回的块void。这就是您调用此类方法的方式:

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

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

于 2013-03-07T09:26:01.820 回答
1

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

请参阅 Apple 的Blocks 编程主题

于 2013-03-07T09:26:00.013 回答