2012-05-02 2 views
0

내 응용 프로그램에는 전체 응용 프로그램의 한 위치에서만 사용하는 UIViewController 하위 클래스 (VC)가 있습니다. 그 대신에, 나는 작성하고 다음과 같이 밀어왔다 :정적 UIViewController 하위 클래스에서 [super dealloc] 호출하지 않음

MyViewController* VC = [MyViewController new]; 
[self.navigationController pushViewController:VC animated:YES]; 
[VC release]; 

하지만이 내가이 유형의 뷰 컨트롤러를 사용하고있는 유일한 장소이기 때문에, 나는이 같은 그래서 뭔가를 할 수 있다고 생각했다 뷰 컨트롤러가 스택으로 푸시 때마다 재설정되지 않습니다 사용하는 설정 :

static MapsToSendPicker* VC = nil; 
if(!VC) { 
    VC = [MapsToSendPicker new]; 
} 

[self.navigationController pushViewController:VC animated:YES]; 
[VC release]; 

VC의 dealloc 방법, 내 인스턴스 변수를 모두 해제하고 전무로 설정하는 것이 그 코드의 문제는, 마지막으로 [super dealloc]으로 전화합니다. 정적 뷰 컨트롤러를 할당 해제하지만 테스트 if(!VC)은 true로 평가되지 않습니다 (이 경우 전체 아이디어의 목적을 무력화 한 다음 어쨌든 매번 View Controller를 다시 만들어야합니다).

내 솔루션 끝에 [super dealloc]를 호출하는 dealloc MyViewController의 방법 하지을 무시한다. 이 작동하지만 컴파일러에서 경고를 발생시킵니다. 이 디자인으로 얻을 수있는 기능을 유지하면서 경고를 없애려면 어떻게해야합니까? 감사!

편집

: 빠른 Google 검색 후

, 나는이 솔루션을 발견 :

- (void)dealloc { 
    if(NO) { 
     [super dealloc]; 
    } 
} 

을하지만 조금 ... 청소기 뭔가를하고 싶습니다. 이견있는 사람?

+0

빠른 Google 검색 후에 ** 완전히 잘못된 대답 **을 발견했습니다. 그 "솔루션"은 기껏해야 메모리 누수입니다. – bbum

답변

3

[VC release]; 줄을 제거하고 [super dealloc]을 다시 추가하십시오. 모든 것이 제대로 작동하고 dealloc이 호출되지 않습니다. 일반적으로 항상 컨트롤러에 메모리를 유지하는 대신 VC 속성을 복원하려면 NSUserDefaults을 사용해야합니다.

+0

나는 네가 옳은 것 같아 - NSUserDefaults 맞아! –

관련 문제