일반적으로 두 가지 방법이 있습니다. 당신의 다음 뷰 컨트롤러를 인스턴스화 할 때 첫 번째 방법에서
는, 현재 (빨리에 이전 또는 상위) 뷰 컨트롤러에서 "상속"을 배열 속성을 설정할 수 있습니다 :
MyNextViewController *_myNextViewController = [[MyNextViewController alloc] initWithNibName:@"MyNextViewController" bundle:nil];
_myNextViewController.myViewControllerArray = self.myViewControllerArray;
...
두 번째 방법에서는 응용 프로그램 위임에 myAppDelegateArray
속성을 만들고 응용 프로그램이 초기화 될 때 배열을 인스턴스화하거나 필요에 따라 인스턴스화 할 수 있습니다.
그러면 뷰 컨트롤러를 포함한 모든 클래스에서이 속성에 대한 getter를 호출 할 수 있습니다.
예를 들어, MyNextViewController
의 인스턴스 내에서, 당신은 속성이 myViewControllerArray
라고 할 수도 있습니다 다음과 같이 당신은 그것을 설정합니다 :
이
self.myViewControllerArray = [UIAppDelegate myAppDelegateArray];
당신은, 파일을 응용 프로그램 상수 어딘가에 예를 #define
문을 추가합니다 :
#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)
또는 원하는 경우, 전체 [UIApplication sharedApplication].delegate
전화를 사용합니다.
일반적인 접근 방식으로 사람들은 원하는 속성에 대한 액세스를 분산화하기 때문에 앱 위임 방식을 선호하는 것처럼 보입니다.
이 방법을 사용하면 뷰 컨트롤러를 재정렬하거나 새로운 뷰 컨트롤러를 VC 계층에 삽입 할 때 참조가 항상 앱에서 사용할 수 있으므로 부모 뷰 컨트롤러에서 상속 된 하위 뷰 컨트롤러 속성을 디버깅 할 필요가 없습니다 대리자.
사람들을 가르치는 좋은 디자인 기술이 아니기 때문에 "Globals.h와 같은 응용 프로그램 대리자 사용"접근법을 개인적으로 권장하지 않습니다. 클래스 속성을 사용하여 객체를 전달하는 것은 훨씬 질서 정연합니다. –
저는 실제로 이러한 디자인에 대한 찬반 의견을 듣고 싶습니다. 나는 그들에 대해 두 가지 생각을 갖고 있으며 최근에 코드를 더 많이 재사용 할 때 애플 리케이션 위임 접근법을 사용하는쪽으로 기울어졌습니다. –
호기심에서 ... 전달되는 공유 NSArray를 재설정하는 가장 좋은 방법은 무엇입니까? 릴리즈를 수행하거나 nil로 설정하십시오. 또한 NSarray = nil을 Controller A IF Controller B에 설정하고 C에 retain을 설정하면 어떤 효과가 있습니까? 감사합니다. – wgpubs