我有一些代码如下:
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。 我该怎么做?
答案 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添加到公司徽标中。 摆脱块中的声明/赋值并使用第一个。 :)