我遇到錯誤 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