2012-06-29 4 views
2

블록이 약간 편집증에 빠지며 유지주기가 생성 될 가능성이 있습니다. 저는 블록 기반 버전 UIAlertView 클래스를 사용하고 있습니다.이 클래스를 사용하면 위임 메서드 대신 블록을 사용할 수 있습니다. 이 Alertviews를 많이 사용하기 때문에, 나는 무거운 짐을 많이 들게하는 인스턴스 메소드를 종종 호출합니다.iOS 차단 및 유지주기에 대한 편집증

내가 someInstanceMethod 메서드에서 지정한 과제는 유지주기를 유발합니까?
(I 메모리 관리 ARC를 사용하고있다.)

__weak id weakSelf = self; 
[doWorkAndThen:^{ 
    [weakSelf someInstanceMethod]; 
}]; 

-(void) someInstanceMethod{ 
    //will either of the assignments below cause a retain cycle? 
    self.iVar = @"data"; 
    [self setIvar:@"data"; 
} 

답변

8
-someInstanceMethod

번호가 블록 아니다. 당신이 하나로부터 그것을 부르고 있다는 사실은 부적절합니다. 안에 안에 블록 자체가 유지 될 수 있으며 블록 내부의 유일한 참조는 __weak 변수이므로 괜찮습니다.

덧붙여 말하면, 실제로 마음을 편하게하려면, 블록 기반 UIAlertView 클래스를 수정하여보기를 닫을 때 모든 블록을 버려야합니다. 이렇게하면 보관주기를 만들더라도 경고보기가 사라지 자마자 자동으로 중단됩니다.

+0

감사합니다. 케빈! 지금은 블록에 대해 훨씬 나아졌습니다. – bgolson

관련 문제