【问题标题】: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);
      }];
      

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

      【讨论】:

        【解决方案3】:

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

        请参阅 Apple 的 Blocks Programming Topics

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-19
          • 1970-01-01
          • 2013-03-09
          • 2012-03-11
          • 1970-01-01
          相关资源
          最近更新 更多