2013-02-27 13 views
0

我已經開始重構我的代碼最近,我試圖通過使用更多的線程來提高性能。尤其適用於下載和連接。我有一個功能叫...從單獨的NSThread中運行(前)函數接收返回值的替代方法?

- (UIImage *)imageFromURLString:(NSString *)urlString; 

...它只是建立一個連接,從接收到的數據創建一個UIImage並返回它。

現在我已經開始使用線程,並且我意識到我無法獲得返回值(當線程從被調用的方法分離運行時,這是有意義的)。 什麼是「最好」/最優雅的方式,通常解決這種問題?

  • 我應該創建一個原子類變量和 原函數內補嗎?
  • 可能將一個指向UIImage對象的指針傳遞給該方法,並且 從內部填充它?

我知道,使用類變量將是最簡單的解決方案,但它似乎並不很「乾淨」,也不是最佳的給我。提前致謝!

回答

3

答案是塊

- (void)imageFromURLString:(NSString *)urlString completionBlock:(void(^)(UIImage *image))

基本上當圖像被提取,你將執行由被叫方傳遞的塊和圖像將作爲ARG

傳遞的使用將是

[self imageFromURLString:@"url" completionBlock:^(UIImage *image){ 
    //do some stuff with the image 
} 
+1

我沒有想到它們。感謝這個提示。所以我應該基本上保存塊內的圖像? – 2013-02-27 09:15:58

+0

取決於你需要做什麼。您可以將arg傳遞給另一個處理圖像的方法。但是如果你需要保留那張圖片,你可以保留一個參考 – Ultrakorne 2013-02-27 10:56:13