오류가 발생했습니다
변수를 할당 할 수 없습니다 (__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
선언은 변수를 처음 선언 할 때 즉, 변수가 아닌 블록의 바깥쪽에 선언해야합니다. 이것은 변수를 블록 외부에 유지하지 않는 변수에 대한 주석에서 언급 된 문제를 해결해야합니다.
답변
__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를 사용하더라도 강력한 변수를 사용하지 않아야합니다.