2014-02-07 47 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