2013-06-14 1 views
-1

가정용 ViewController에서 사용자 선택에 따라 선택한 viewcontroller를로드해야합니다. 이를 위해 선택된 뷰 컨트롤러로 inited NavController AppDelegate.window.rootViewController 변경하고 있습니다.set appdelegate 'window rootviewcontroller

예 :

navigationController = [[UINavigationController alloc] initWithViewController:selectedViewController]; 
[UIApplication delegate].window.rootviewcontroller = navigationController; 

이 모든 작업 괜찮하지만 여기 내 질문은 : selectedViewController에서 나는 viewcontrollers 헤아 렸어요 일부 n으로 이동하고 마지막에 내가 AppDelegate에 'rootviewcontroller을 설정하여 HomeViewController를로드하고 있습니다.

navigationController = [[UINavigationController alloc] initWithViewController:homeViewController]; 
[UIApplication delegate].window.rootviewcontroller = navigationController; 

내 navigationController 탐색 스택이 지워 집니까? 또는 외부에서 배열을 지워야합니까? Plz이 일하는 방법을 도와주세요. 아마도 우리가 appviewlegate 'window rootviewcontroller에 네비게이션 컨트롤러를 할당 할 때 어떤 일이 일어날 지 설명해 주시겠습니까?

제 응용 프로그램은 6.0 버전입니다.

+1

왜 rootviewcontroller를 매번 재설정 하시겠습니까? – Adithya

+0

글쎄, 내가 바꿀 생각이없는 기존 코드. 아마도 몇 가지 목적이 있지만 여기서 나는 rootviewcontroller를 변경할 때 탐색 스택이 비어 있는지 확인해야합니다. – Srivathsa

답변

1

탐색 스택은 탐색 컨트롤러에 의해 유지 관리됩니다. 그래서 새로운 네비게이션 컨트롤러를 만들면 그 스택은 분명 비어 있습니다. RootViewController 속성은 누가 응용 프로그램의 현재 윈도우에있는 기본 viewController인지 정의합니다. 그래서 rootviewcontroller를 교체하면이 컨트롤러의 주 컨트롤러로 새로운 컨트롤러가 표시됩니다.

1

코드를 보지 않고 코드에 메모리 누수가 있는지 여부는 아무도 보장 할 수 없습니다. 일반적으로 네비게이션 컨트롤러가 파괴되면 스택의 뷰 컨트롤러가 해제됩니다. 그러나 때로는보기 컨트롤러가 코드에서 유지 될 수 있습니다. 즉, 해제되지 않고 활성 상태로 유지되고 메모리가 누수됩니다.

귀하의 경우 귀하의 앱을 프로파일 링하실 것을 강력히 권합니다. Allocations/Leaks와 같이 XCode instruments을 사용하십시오. 메모리가 해제되어 있는지 여부에 관계없이보기 컨트롤러/탐색 컨트롤러 인스턴스를 확인하십시오. 메모리가 유출 된 경우 컨트롤러에서 코드가 유지되는 위치를 찾으십시오.

다음은 코드에서 메모리 누수를 찾는 방법에 대한 Raywenderlich's site에서 좋은 지침서입니다.

관련 문제