将块内的variables分配给块外的variables
我收到一个错误
variables不可分配(缺less__blocktypes说明符)
在线aPerson = participant;
。 我怎样才能确保块可以访问aPerson
variables和aPerson
variables可以返回?
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 Person *aPerson = nil;
有关更多详细信息,请参阅本教程: 块和variables
只是提醒我也犯了一个错误
__block
声明必须在首先声明variables时完成,即在块的外部,而不是在块内部。 这应该解决在variables不保留在块外部的variables中提到的问题。
只需使用__block
前缀来声明和分配块内的任何types的variables。
例如:
__block Person *aPerson = nil; __block NSString *name = nil;
要在block外部分配一个variables,在块之外总是使用__block说明符,那么你的代码应该是这样的: –
__block Person *aPerson = nil;
__block Person *aPerson = nil;
是的块是最常用的function,所以为了避免保留周期,我们应该避免使用强variables,包括块内的自身,尽pipe使用_weak或weakself。
尝试__weak
如果你得到有关保留周期的任何警告,否则使用__block
Person *strongPerson = [Person new]; __weak Person *weakPerson = person;
现在你可以引用块内的weakPerson
对象。