2013-03-07 72 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