2010-03-03 5 views
1

viewDidUnload 및 dealloc 메서드를 처리하고 있으며 [super dealloc]을 호출 할 때 문제가 발생했습니다. 상위 뷰 컨트롤러에서.iPhone : parentViewController에서 dealloc을 호출하면 예외가 발생합니다.

나는 상위 뷰 컨트롤러에 외부에 퍼팅 한 사용자 지정 코드가있는 뷰 컨트롤러가 많습니다.

//(Login View Controller code) 
- (void)dealloc { 
    [user release]; 
    [passwd release]; 
    [super dealloc]; 
} 

[슈퍼의 dealloc]은 다음을 실행하십시오 할당 해제의 방법에서 나는 AbstractViewController의의 dealloc 메소드를 호출, 그리고

@interface LoginViewController : AbstractViewController 

: 내보기 컨트롤러를 정의 할 때, 나는 슈퍼 클래스에 대한 참조를 설정 코드 : 나는 아이폰 시뮬레이터에 경고 메모리를 시뮬레이션하는 경우

//(Abstract View Controller code) 
- (void)dealloc { 
    [dbUtils release]; 
    [loadingView release]; 
    [super dealloc]; 
} 

은, 다음과 같은 예외가 발생 :

2010-03-03 11:27:45.805 MyApp[71563:40b] Received simulated memory warning. 
2010-03-03 11:27:45.808 MyApp[71563:40b] *** -[LoginViewController isViewLoaded]:  message sent to deallocated instance 0x13b51b0 
kill 
quit 

그러나 AbstractViewController에서 [super dealloc] 행에 주석을 달면 예외가 발생하지 않고 내 앱이 계속 실행됩니다.

다시 한 번 도움을 주셔서 감사합니다.

+0

로드 중 무엇입니까? – willcodejavaforfood

+0

AbstractViewController initWithNib에서 초기화되는 또 다른 viewController는 ...입니다. self.loadingView = [[UIViewController alloc] initWithNibName : @ "LoadingViewController"번들 : nil]; – arielcamus

답변

2

보기 컨트롤러를 비우는 것처럼 보이지만 다시 사용하려고합니다. 메모리 경고로 인해 뷰 컨트롤러를 비울 때 실수로 다시 사용하지 않도록 포인터를 nil로 설정해야합니다.

[myLoginViewController release]; //!< Triggers the dealloc call 
myLoginController = nil; //!< Makes sure we never use it again 

같은 즉, 뭔가 myLoginViewController이 속성은이 깔끔한 방법으로이 작업을 수행 할 수있는 경우 나, :,

self.myLoginViewController = nil; 

희망 도움이

1

공지 -didReceiveMemoryWarning는 않습니다 트리거하지 않으면 -dealloc, -viewDidUnload를 트리거합니다. 그래서 컨트롤러의 최종 보유가 해제되어 -dealloc이 호출되도록하는 잘못된 작업을 -viewDidUnload를 구현 한 것으로 생각합니다. 나는 방금 -viewDidUnload에서 릴리스 된 유지 보수로 인해 발생하는이 코드를 코드에서 발견했습니다.

0

이것은 나에게 일어난 일이며 알아 내기 위해 시간이 걸렸다. 대의원 중 한 명이 메시지를 보내려고했는데 그 이유는 대의원이 자신 이었기 때문에 강력한 참조 였기 때문입니다. 내가 약하게 만들었을 때 그것을 고쳤던 것 같다.

관련 문제