2014-02-07 55 views
1

本地變量我有一點的代碼如下:的iOS - 訪問內部塊

companyLogo = nil; 


[DLImageLoader loadImageFromURL:image_url 
         completed:^(NSError *error, NSData *imgData) { 
          if (error == nil) { 

           __block UIImage *companyLogo = [UIImage imageWithData:imgData]; 

          } else { 
           // if we got error when load image 
          } 
         }]; 

我試圖分配一個來自DLImageLoader塊回CompanyLogo的數據。 我該怎麼做?

回答

2

您只需使用__block關鍵字定義您的本地變量。

__block UIImage* companyLogo = nil; 

[DLImageLoader loadImageFromURL:image_url 
         completed:^(NSError *error, NSData *imgData) { 
          if (error == nil) { 
           companyLogo = [UIImage imageWithData:imgData]; 
          } else { 
           // if we got error when load image 
          } 
         }]; 

在你張貼,你重新聲明的塊內的變量的例子中,因此「隱藏」的塊之外聲明的變量。相反,我們聲明一次(塊外),並添加__block關鍵字來表示我們希望此變量在塊內持久可修改。

您可以在這裏閱讀關於__block關鍵字後勤的更多信息:What does the "__block" keyword mean?。本質上,它告訴編譯器如何處理變量的內存管理,以便變量的真實內存位置在塊內可見,而不是變量內容的副本。

+0

工作得很好。謝謝! – stackOverFlew

+0

這個答案是無用的,因爲'loadImageFromURL:completed:'方法是異步的,所以在塊之外,當前函數返回之前不能設置局部變量'companyLogo'。 – newacct

0

我相信你還需要在公司logo上添加__block。 擺脫塊中的聲明/作業並使用第一個。 :)

+0

你是什麼意思?我不太明白 – stackOverFlew