2011-04-13 4 views
4

나는 이 뷰 컨트롤러 언로드/다시로드를 구현하는 방법을 궁금하고 iOS를 처음 사용합니다.보기 컨트롤러를 언로드/다시로드하는 올바른 방법

지금 내 앱에는 루트보기 컨트롤러로 설정된 MainMenuViewController (사용자 정의보기 컨트롤러)가있는 NavigationController가 있습니다. 앱 수명 기간 동안 새로운 ViewController가 탐색 컨트롤러에 푸시/팝됩니다. 이 작업은 정상적으로 작동하며, 적절한 ViewController는 처음 스택에 푸시 될 때 (NIB에서) 시작됩니다.

그러나 이제는 특정 ViewController가 팝되면 언로드하고 다시 푸시 될 때 자동으로 다시로드하려고합니다.

해당 ViewControllers viewDidDisappear:[self release]을 추가했으며 언로드했지만 뷰를 다시 밀어 넣을 때 dealloc'ed 인스턴스 오류 및 충돌로 메시지가 전송됩니다. 따라서 내 질문은 다음과 같습니다.

  1. 팝업 된 ViewController를 언로드하는 적절한 방법입니까?
  2. 주어진 ViewController가로드되었는지 확인하는 방법은 무엇입니까?
  3. 강제로 다시로드하는 방법은 무엇입니까? loadWithNib:을 사용하여 탐색 스택에 밀어 넣으시겠습니까?

감사합니다,

피터 아이폰 OS 프로그래밍

답변

3

에 오신 것을 환영합니다. 충돌은 메모리 관리 문제입니다.

객체가 유지 아무것도를 공개 할 필요가

(ALLOC를 유지하는 것과 동일) : 그것은 그것의 묘리를 터득 당신에게 조금 걸릴 수 있지만, 당신은 단지 하나의 규칙을 따르는 경우에 메모리 관리 방법을 쉽게 얻는다 이 경우, 귀하의보기 컨트롤러 자체를 공개하고 확실히 자체를 유지하지 않았다. 다음 순서가 탐색 컨트롤러와 함께 작동 방법은 다음과 같습니다

  1. 네비게이션 컨트롤러 루트 뷰 컨트롤러 (그 스택의 첫 번째)로 초기화됩니다. 전화를 걸자. firstViewController

  2. 사용자 작업은 firstViewControllersecondViewController을 초기화하고 탐색 컨트롤러로 밀어 넣으라고 지시합니다. 대부분의 경우 firstViewController은 밀어 넣은 후 secondViewController의 인스턴스를 해제합니다. 이 시점에서 firstVCsecondVC으로 완료됩니다. 내비게이션 컨트롤러가 현재 보유 중임 secondVC

  3. 사용자가 내비게이션 막대 secondVC의 뒤로 버튼을 터치합니다. 네비게이션 컨트롤러는 스택에서 secondVC을 가져와 놓습니다. 다른 객체가 그것을 보유하지 않는 한, secondVC은 dealloc 될 것이다.

  4. 이제 사용자는 firstVC으로 돌아갑니다. 그들은 secondVC의 새 인스턴스를 초기화하고 푸시하는 동일한 사용자 조치를 수행 할 수 있습니다.

희망이 조금 있습니다.

또한 Apple 문서를 읽고 프레임 워크 문서에 언급 된 샘플 코드를 살펴 보시기 바랍니다.

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

+0

답변에 대한 감사의,하지만 당신은 주어진 한 예는 제 경우 너무 기본입니다 - 나는 그것이 튀어 때 가끔, 심지어 내가 그것을 할 때 (할당 해제 할 viewcontrollers하고 결정하려면 사용자의 상태가 저장되면 상태가 저장되므로 사용자가 다시 돌아올 때까지는 너무 오르지 않게됩니다.) 지금 당장이 작업을하고 MainView 컨트롤러를 알림 센터의 관찰자로 설정하고 다른보기 컨트롤러는 dealloc'ed 또는 스택에서 갑자기 꺼내기를 원한다면 알림을 게시합니다. –

+0

나는 당신이 무엇을하려하는지 정말로 모르지만 나는 여전히 문서를 읽고 이해하는 것이 좋습니다. 필요에 따라 간단하게 시작하고 복잡성을 추가하면 모든 것이 효과적입니다. 행운을 빌어 요. – XJones

관련 문제