6

나는 UINavigationControllerUIViewController에 대해 학습하고 있습니다. 다음은 내가 만든 간단한 앱입니다. ARC를 사용합니다.UINavigationController 및 UIViewController는 어떻게 작동합니까?

내 앱에는 내비게이션 컨트롤러와 두 개의보기 컨트롤러가 있습니다 (FirstViewControllerSecondViewController). 앱이 실행되면 내비게이션 컨트롤러 FirstViewController을 스택에 놓습니다.

FirstViewController 나는 터치했을 때 SecondViewController를 누르는 버튼이 있습니다. 여기에 몇 가지 코드가 있습니다.

번째 뷰 컨트롤러 FirstViewController.m

-(IBAction)pushSecondViewController 
{ 
    SecondViewController *secondViewController = [SecondViewController alloc]init]; 
    [self.navigationController pushViewController:secondViewController animated:YES]; 
} 

I는 스택에서 현재 뷰 컨트롤러 팝업 버튼을 가지고있다.

SecondViewController.m

-(IBAction)popViewController 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

지금까지 너무 좋아. 내 질문은 다음과 같습니다.

navigationController는 기존 인스턴스 SecondNavigationController을 확인하고 존재하지 않으면 새로운 인스턴스를 만듭니다.

그렇지 않은 경우 싱글 톤을 사용하여 SeconViewController을 누르는 버튼을 터치 할 때마다 새 인스턴스를 만드는 대신 하나의 인스턴스 만 만들어지고 다시 사용되는지 확인해야합니까?

답변

4

현재 코드를 사용하면 두 번째보기 컨트롤러가 스택에서 튀어 나올 때 파괴되므로 아니오, 탐색 컨트롤러가 다시 사용하지 않습니다.

실제로 두 번째보기 컨트롤러를 유지하려면 첫 번째보기 컨트롤러의 강력한 속성으로 설정하고 실제로 이유가없는 한이 작업을 수행하지 마십시오. 사용중인 방법이 표준이며 새로운 뷰 컨트롤러가 일반적으로 화면 상에 있지 않은 뷰 컨트롤러로 많은 메모리를 차지하는 것이 좋습니다. 메모리는 프로세서 리소스보다 부족합니다. 뷰 컨트롤러를 만드는 것은 항상 발생합니다.

+0

아니요, 두 번째보기 컨트롤러를 계속 유지하고 싶지 않습니다. 내비게이션 컨트롤러가 작동하는 방식에 대해 궁금합니다. 설명 주셔서 감사합니다! – ihodo

+0

새 주제를 시작하지 않으려면.내 앱에 4 개의보기 컨트롤러가 있다고 가정하면 첫 번째와 두 번째보기 컨트롤러는 앱에서 한 번만 사용됩니다. 메모리를 사용하지 않기 위해서 네비게이션 컨트롤러에서 그들을 팝업해야합니까 ([self.navigationController popViewControllerAnimated : YES])? – ihodo

+0

아니요, 푸시 및 팝을 사용하여 탐색 스택을 위아래로 이동합니다. – jrturton

1

나는 jrturton에 동의하며 다음 지침을 추가합니다.

첫째, 제 생각에는 컨트롤러를 싱글 톤으로 만드는 것은 좋지 않습니다.

그런 다음 어떤 유형의 인스턴스가 UINavigationController 컨트롤러 배열에 있는지 확인해야합니다.

@property(nonatomic, copy) NSArray *viewControllers 

마지막으로, 당신은 당신의 컨트롤러에 대한 강한 참조를 만들 수 있지만 전혀 필요는 없습니다. 새 컨트롤러를 만드는 것은 매우 신속합니다. 그것을 강력하게 참조하는 대신, 제시된 데이터를 캐시합니다. 이렇게하면 사용자가 이미 다운로드 한 데이터를 기다리는 것을 방지 할 수 있습니다.

희망이 있습니다.

+0

너무 감사합니다! – ihodo

+0

반갑습니다. 원하는 경우 upvote :) –

관련 문제