2011-02-25 9 views
1

안녕하세요, 저는 누군가이 문제를 해결할 수 있기를 바랍니다. 사용자가 성공적으로 아래와 같이 "로그인"컨트롤러를 대체 할 다른 컨트롤러를 호출 할이 로그인 한 경우사용하지 않을 때 UIViewController 해제

I라는 UIViewController에있는 "로그인"(예를 들어)과 :

[self presentModalViewController:anotherController animated:YES]. 

을 나는 필요가 없습니다 이전 컨트롤러를 더 이상 사용하지 않으므로 아래 코드 스 니펫과 같이 [자체 릴리스]를 배치했습니다.

LoginController.m 

- (void)viewDidDisappear:(BOOL)animated { 
    [self release]; 
} 

그러면 LoginController의 dealloc 메소드가 호출되어 릴리스 될 것입니다. 지금보기에 지금 새로운 컨트롤러

는 UINavigationController가 아래와 같이 호출하는 버튼이 있습니다

[self presentModalViewController:settingsNavigationController animated:YES]; 

을하지만 내가 이전 인 LoginController를 해제하지 않은 경우 정상적으로 동작 할 응용 프로그램을 충돌합니다.

컨트롤러를 해제하는 것이 더 쉽거나 더 논리적 인 방법 일 수 있지만 아이디어가 부족하여 가끔씩 과감한 조치를 취하는 경우가 있습니다.

감사합니다.

답변

3

적어도 자신의 -viewDidDisappear:에는 LoginController를 공개해서는 안됩니다. 해당 컨트롤러는 아직 사용 중이며 참조 할 수 있습니다 (예 : 탐색 컨트롤러의 parentViewController 속성). 컨트롤러가 더 이상 보이지 않을 때뿐만 아니라 컨트롤러가 더 이상 뷰 컨트롤러 계층의 일부가 아닐 때 컨트롤러를 놓습니다.

또한 [self release]은 잘못된 메모리 관리를 적용한다는 경고 기호입니다.

1

현재하고있는 것에는 두 가지 문제점이 있습니다.

먼저 viewDidDisappear는 소멸자가 아닙니다. 거기서 자기를 풀어 내지 마라. viewDidDisAppear 및 appear는 메모리가 아닌보기의 가시성에 사용됩니다.

둘째, presentModalViewController는 MODAL 뷰 컨트롤러 즉, 자식을 표시하기위한 것입니다.

당신은 UINavigationController가를 설정하고 일부 상황에서 당신이 떨어져 현재 모달을 사용하여 [오토 릴리즈] 뷰 컨트롤러를 얻을 수

[navigationController popToRootViewControllerAnimated:FALSE]; 
[navigationController pushViewController:(UIViewController*)controller animated:TRUE];  

를 호출 고려해야한다.

2

1) "로그인"컨트롤러

를 교체 presentModalViewController가 로그인 뷰 컨트롤러를 대체하지 않습니다하지만 로그인 뷰 컨트롤러의 상단에 anotherController을 둔다.

2) viewDidDisappear

당신은 설명서를 참조해야한다. 견적 -이 메서드를 재정의하면 뷰를 닫거나 숨기는 것과 관련된 추가 작업을 수행 할 수 있습니다. 이 메소드를 오버라이드 (override)하는 경우는, 구현의 어느 지점에서 super를 호출 할 필요가 있습니다.

다시 말하면 [super viewDidDisappear:animated]으로 전화해야합니다.

3) 메모리 관리

당신은 확실히 메모리 관리 설명서를 읽을 필요합니다

-http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/MemoryMgmt/MemoryMgmt.html

4)보기 컨트롤러

당신은 확실히 너무보기 컨트롤러 프로그래밍 가이드 읽을 필요합니다

-http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

관련 문제