2011-12-28 2 views
0

Interface Builder 또는 Storyboards에서로드 할 때 UIViewController-> UIView에서 진행되는 작업을 이해하려고했습니다.Storyboards의 UIViewController 라이프 사이클 및 iOS 변수 전달

컨트롤러 사이에서 매개 변수를 전달하는 대부분의 문제를 접할 때 백그라운드에서 어떻게 작동하는지 궁금합니다.

내비게이션 컨트롤러를 사용하는 스토리 보드에서 CoreData 요소에 의해로드 된 테이블 뷰가 있으며 단일 요소는 세부보기를 표시하기 위해 segue 메서드에서 @property를 통해 다음 컨트롤러로 NSManagedObjectID로 전달됩니다. 수신 컨트롤러에서 존재 여부를 확인하고 필요할 때 전체 개체를 재구성합니다.

이 시점에서이 로직을 넣고 처리하는 가장 좋은 장소는 어디입니까? 컨트롤러가 서블릿이라고 불리는 Java EE 배경에서 왔는데 성능상의 이유로 서블릿을 한 번 초기화하고 많은 사용자가 스레드 풀을 사용하여 공유 할 수 있으므로 (위험성이있는 것이 더 바람직합니다) 인스턴스 변수를 가진다. @property가 인스턴스 변수이기 때문에 동일한 메커니즘에 속하지 않으려면 UIViewController가 한 번 인스턴스화되고 CoreData 객체는 View Controller의 경우 동일하게 유지됩니다.

답변

0

iOS에서 각보기 컨트롤러는 단일보기와 그 하위보기를 관리합니다. UISplitViewController를 사용하여 두 개의 동일한 뷰 컨트롤러를 한 번에 화면에 배치하더라도 두 개의 별도 뷰 컨트롤러 클래스 인스턴스가 될 것이며 스토리 보드가 수행 된 각 뷰에 대해 새 뷰 컨트롤러를 인스턴스화한다고 생각합니다. . 따라서 속성을 사용하는 것이 완벽하게 안전 할뿐만 아니라 예상되는 방식입니다.

+0

또한 viewDidLoad 메서드에서 @property를 확인하는 것이 "우수 사례"의 일부라고 생각합니까? – Leonardo

+0

그것은 "확인"이 의미하는 바에 달려 있습니다. "재산에 유효한 가치가 있다고 주장하십시오"는 의미입니까? 그 시점에서 그 가치가 유효하지 않은 상황이 전혀 없다면 나는 왜 그렇게 생각하지 않습니다. 일반적으로 수행되는 것은 아니지만 방어 프로그래밍은 일반적으로 현명한 방법입니다. 보기가 표시되기 바로 전에 발생하는'-viewWillAppear :'에서 이런 일종의 검사를하는 것이 더 좋을 수도 있습니다. 화면에 갈 준비가되기까지 오래 기다려야하는 경우가 있습니다. –