2011-03-29 2 views
1

NSObject (MyCustomObject)의 하위 클래스가 인스턴스화되어 일부 논리를 수행하고 UIAlertView를 표시할지 여부를 결정합니다. MyCustomObject는 UIAlertViewDelegate 프로토콜을 구현하여 좀 더 많은 로직을 수행하고 alertView : clickedButtonAtIndex :에서 NSUserDefaults를 설정합니다. myCustomObject는 어디에서 해제해야합니까? 사용자가 경고보기의 단추 중 하나를 클릭 한 후에 myCustomObject가 더 이상 필요하지 않으면 myCustomObject가 alertView : didDismissWithButtonIndex :에서 자체를 해제 할 수 있습니다.나는 UIAlertViewDelegate 프로토콜을 준수하는 NSObject입니다. 자신을 릴리즈하는 것이 적절한가요?

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    NSLog(@"I'm UIAlertView's Delegate and I'm releasing myself"); 
    [self release]; 
} 

답변

2

사용자 지정 개체에 대한 대리자 프로토콜을 만든 다음 해당 개체의 소유자를 대리인으로 지정하는 것이 더 좋을 것이라고 생각합니다. 클래스의 경고보기 대리자 메서드에서 사용자 지정 위임 메시지를 보내 사용자 지정 개체의 해제를 처리 할 수 ​​있도록합니다.

개체가 호출 코드에서 자동으로 다시 시작되거나 호출 코드가 개체 자체를 수동으로 해제하려고 시도하는 경우 자동 해제를 시도하면 예기치 않은 동작이 발생하거나 충돌이 발생할 수 있습니다.

+0

BC 내가 그것을 할 때마다, 나는 또한 술취한 코카인 중독자 인 것 같은 기분이다. 너무 지저분 해 ... "이봐, 너 나 풀어 줘, 알았지?" 나는 몰라. – Fattie

+0

왜 스스로 풀어 놓는 것이 좋을까요? 만약 자급 자족의 로직이라면, 그냥 놓아두기 위해 여분의 레이어를 만들어야하는 이유는 무엇입니까? – SVD

+0

감사합니다. BoltClock, 귀하의 기술은 정적 분석기를 너무 행복하게 만듭니다 (호출 코드가 myCustomObject를 릴리스하지 않기 때문에 누출이라고 생각합니다). 호출 코드는 뷰 컨트롤러입니다. myCustomObject를 ivar로 설정하고 내 View Controller의 dealloc 메소드에서 해제하는 것이 더 멋지겠습니까? – MattyG

관련 문제