[objective-c] 블록 내부의 변수를 블록 외부의 변수에 지정

오류가 발생했습니다

변수를 할당 할 수 없습니다 (__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;



답변

이 코드 줄을 사용하여 문제를 해결해야합니다.

__block Person *aPerson = nil;

자세한 내용은이 튜토리얼을 참조하십시오 : 블록 및 변수


답변

내가 실수 한 것을 상기시켜주는 것만

 __block

선언은 변수를 처음 선언 할 때 즉, 변수가 아닌 블록의 바깥쪽에 선언해야합니다. 이것은 변수를 블록 외부에 유지하지 않는 변수에 대한 주석에서 언급 된 문제를 해결해야합니다.


답변

__block접두사를 사용하여 블록 안에 변수 유형을 선언하고 할당하십시오.

예를 들면 다음과 같습니다.

__block Person *aPerson = nil;

__block NSString *name = nil;


답변

블록 외부에있는 블록 내부에 변수를 할당하려면 해당 변수 앞에 항상 __block 지정자를 사용하십시오. 코드는 다음과 같아야합니다.

__block Person *aPerson = nil;


답변

__block Person *aPerson = nil;


답변

보십시오 __weak당신에 대한 경고를받을 경우주기 다른 사용을 유지__block

Person *strongPerson = [Person new];
__weak Person *weakPerson = person;

이제 weakPerson블록 내부의 객체 를 참조 할 수 있습니다 .


답변

yes 블록이 가장 많이 사용되는 기능이므로, 유지주기를 피하려면 블록 내부의 self를 포함하여 _weak 또는 weakself를 사용하더라도 강력한 변수를 사용하지 않아야합니다.