올바르게 작동하는지 알아야합니다. 응용 프로그램은 정상적으로 실행되고 있지만 수명주기가 올바르게 유지되는지 확신 할 수 없습니다 (누출?).블록 및 ARC가있는 메모리 관리, 누출?
참고 : 계측기에는 누출이 없습니다.
메소드 AAA의 코드는 : 어떤 클래스 A의 :
- (void) aaa {
NSString *path = ...something...;
NSBlockOperation* theOp = [NSBlockOperation blockOperationWithBlock: ^{
// using path
[self somethingElseWith:path];
}];
[self.aQueue addOperation:theOp];
}
그래서 나는 aQueue (NSOperationQueue *)에 넣어 블록을 만들 수 있습니다. 목표는 GUI가 응답 성을 유지할 수 있도록 long running somethingElseWith : 메소드를 주 스레드에서 오프로드하는 것입니다.
블록 안에는 aaa : 메서드의 끝에서 범위를 벗어날 로컬 var "path"가 참조됩니다.
문서를 올바르게 읽으면 블록이 '경로'에 보관됩니다. 그러나 ARC는이 블록의 끝에 암시 적으로 릴리즈를 삽입합니까? 논리적이고 멋질 것입니다.
또는 '경로'를 __block으로 선언하고 블록 끝에있는 nil에 할당해야합니까? (수동 ...)
잘 모르겠습니다.이 컨텍스트에서 __weak을 사용하는 방법을 알고 있습니다.
감사합니다. 질문 : ARC가 사용되지 않으면'path' 변수도 괜찮습니까? 또는 블록의 끝에'[경로 해제]'가 필요합니까? – malaba
@malaba 블록이 당신을 위해 경로를 유지하고 블록이 할당 해제/범위를 벗어날 때 해제하기 때문에 경로 변수는 ARC의 유무에 관계없이 잘됩니다. – Joe