我遇到错误
变量不可分配(缺少__block类型说明符)
在线aPerson = participant;
。 我如何确保该块可以访问aPerson
变量并且可以返回aPerson
变量?
Person *aPerson = nil;
[participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Person *participant = (Person*)obj;
if ([participant.gender isEqualToString:@"M"]) {
aPerson = participant;
*stop = YES;
}
}];
return aPerson;
#1楼
要在块内分配一个在块外的变量,请始终在该变量之前使用__block说明符:
__block Person *aPerson = nil;
#2楼
只需使用__block
前缀在块内声明和分配任何类型的变量即可。
例如:
__block Person *aPerson = nil;
__block NSString *name = nil;
#3楼
只是提醒我我也犯了一个错误,
__block
在首先声明变量时,即在块的外部,而不是在内部,必须进行声明。 这样可以解决注释中提到的关于变量不在块外保留其值的问题。
#4楼
__block Person *aPerson = nil;
#5楼
如果收到有关保留周期的任何警告,请尝试__weak
,否则请使用__block
Person *strongPerson = [Person new];
__weak Person *weakPerson = person;
现在,您可以在块内引用weakPerson
对象。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3166360