将块内的variables分配给块外的variables

我收到一个错误

variables不可分配(缺less__blocktypes说明符)

在线aPerson = participant; 。 我怎样才能确保块可以访问aPersonvariables和aPersonvariables可以返回?

 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对象。