iOS - 访问块内的本地变量

时间:2014-02-07 23:47:15

标签: ios objective-c block objective-c-blocks

我有一些代码如下:

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 个答案:

答案 0 :(得分: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?。本质上,它告诉编译器如何处理变量的内存管理,以便变量的真实内存位置在块内可见,而不是变量内容的副本。

答案 1 :(得分:0)

我相信您还需要将__block添加到公司徽标中。 摆脱块中的声明/赋值并使用第一个。 :)