그것은이 완료 핸들러와 함께 몇 가지 물건을 할 수 있도록하고 핸들러에서 그것을 풀어 개체를 할당 내 코드의 일반적인 패턴입니다 : 이것은 매우 잘 작동ARC에서 블록 완료 핸들러로 객체를 해제하려면 어떻게해야합니까?
LongOperation *foo = [[LongOperation alloc] init];
[foo runWithCompletion:^{
// run some code and then:
[foo autorelease];
}];
,하지만 난 코드를 변환 할 때 ARC에서 Xcode는 블록에서 autorelease
을 단순히 삭제할 수 없다는 불만을 제기합니다. 이는 foo
개체가 범위를 벗어나면 할당이 해제되도록하기 때문입니다.
그래서 ARC에서 이런 종류의 패턴을 작성하는 좋은 방법은 무엇입니까?
[self setFoo:[[LongOperation alloc] init]];
[foo runWithCompletion:^{
// run some code and then:
[self setFoo:nil];
}];
을 ...하지만 코드는 재입되지 않을 것 이상 : 나는 foo
의 인스턴스 변수를 도입 할 수있다.
이것은 foo가 포함 된 컨텍스트가 오래 전에 사라 졌을 때 어떻게해야하는지에 대한 질문에 대답하지 않습니다. 이 솔루션을 사용하면 [foo runWithCompletion :]을 호출하는 스택 프레임은 실행이 완료되거나 스택이 더 위험해질 때까지 차단해야합니다. –