我遇到错误 spa
变量不可分配(缺乏__block类型说明符) code
在线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;
要在块内分配一个在块外的变量,请始终在该变量以前使用__block说明符: ip
__block Person *aPerson = nil;
只需使用__block
前缀在块内声明和分配任何类型的变量便可。 ci
例如: 变量
__block Person *aPerson = nil; __block NSString *name = nil;
只是提醒我我也犯了一个错误, 引用
__block
在首先声明变量时,即在块的外部,而不是在内部,必须进行声明。 这样能够解决注释中提到的关于变量不在块外保留其值的问题。 top
__block Person *aPerson = nil;
若是收到有关保留周期的任何警告,请尝试__weak
,不然请使用__block
注释
Person *strongPerson = [Person new]; __weak Person *weakPerson = person;
如今,您能够在块内引用weakPerson
对象。 ant