중첩 된 블록의 __block 변수에 문제가 있습니다. 내 질문은, 다음과 같은 코드가 작동해야합니까?__block 변수 중첩 된 블록의 동작
__block NSString* s = nil;
[self methodWithBlock:^
{
s = [self methodThatReturnsAnAutoreleasedString];
[self methodWithBlock:^
{
[NSLog @"%d", s.length];
}];
}];
내부 블록이 s
으로 유지되지만 내 코드에는 해당되지 않는다고 가정했습니다. 내부 블록의 s
에 액세스 할 때 "할당 해제 된 인스턴스로 전송 된 메시지"가이됩니다. 내가 그것을 할당 할 때 (s = [[self methodThatReturnsAnAutoreleasedString] retain];
)를 유지하면 정상적으로 작동합니다.
물론 실제 코드가 아니기 때문에 더 복잡합니다.하지만 최소한의 예제 만 제대로 작동하는지 알고 싶습니다. 그렇다면 다른 곳에서 나의 문제를 찾아야합니다. Transitioning to ARC Release Notes에서
"내가 (...) 할당 할 때 보유하면 잘 동작합니다." 네, 그렇게해야합니다. 또한 작업을 마쳤을 때 놓지 않으면 유출됩니다. – newacct