2013-08-01 2 views
0

viewcontrollers간에 데이터를 전송하는 데 문제가 있습니다. 이제 저는 작은 응용 프로그램을 만들고 있습니다. 주요 viewcontroller가 있으며,이 viewcontroller 사용자는 다른 모든 viewcontroller가 인터넷에서 데이터를 가져 오는 데 사용할 일부 전역 데이터를 변경할 수 있습니다. 따라서 글로벌 데이터가 변경되면 다른 뷰 컨트롤러에 데이터를 업데이트 할 필요가 있습니다.iOS에서 viewController를 관리하는 방법

질문은 입니다. 글로벌 데이터가 변경되면 다른 뷰 컨트롤러에 어떻게 알릴 수 있습니까??

나는이 문제를 해결하기 위해 NSNotificationCenter를 사용해야한다는 것을 알고 있지만 모든 viewcontrollers에 대한 외국인과 같은 느낌이 들었다.

내가하고 싶은 일은 ViewControllerManager를 추가하여 모든 viewController를 관리하는 것입니다. 첫째, 관리자에게 전역 데이터를 사용해야하는 모든 뷰 컨트롤러를 추가합니다. 그런 다음 글로벌 데이터가 변경되면 관리자를 통해 이러한 뷰 컨트롤러를 찾고 전역 데이터를 직접 업데이트하도록 알릴 수 있습니다.

이것은 내 @interface입니다.

@interface ViewControllerManager : NSObject 
+ (ViewControllerManager *)sharedManager; 
- (void)addViewController: (UIViewController *)viewController; 
- (void)removeViewController: (UIViewController *)viewController; 
- (void)removeViewControllerByClass: (Class)aClass; 

- (UIViewController *)viewControllerByClass: (Class)aClass; 
- (NSArray *)viewControllersByClass: (Class)aClass; 

//get viewcontrollers who can response to selector, so I can send them this message. 
- (NSArray *)viewControllersResponseTo: (SEL) selector; 

//get current visible viewcontroller. 
@property (nonatomic, retain) UIViewController * visibleViewController; 

@end 

그것은이 관리자를 통해 잘 내가 원하는의 ViewController를 얻을 수 있고, 내가 viewcontrollers 사이에 쉽게 글로벌 데이터를 전송할 수 있습니다, 그러나 문제는 내가 어떻게 메모리를 관리하는 를 모르는되어 작동

올바르게, 방법 [ViewControllerManager addViewController: ]에서, 나는 viewController를 유지하지만,이 viewController는 결코 dealloc이 될 수 없으므로,이 뷰티 롤러는 결코 해제되지 않습니다. ...

답변

1

릴리스 가능성이있는 최신 시점은 다음과 같습니다. 관리자 클래스의 dealloc 메소드에서. 배열을 추가하는 순간 배열에 해당 제어기를 저장하면 배열도 유지됩니다. 컨트롤러가 아닌 어레이 만 유지하고 해제하는 솔루션 일 수 있습니다. 항목이 배열에서 제거되면 배열은 필요한 해제를 수행합니다. 또한 배열이 사라지면 (해제 된) 항목도 사라집니다 (자동으로).

그런데 당신이하는 일은 중재자 패턴이라고 생각합니다. 컨트롤러는 서로에게 집중하지 않고 중심 개체와 만 통신합니다. 중재자 만이 모든 배우를 압니다.

+0

감사합니다 당신의 도움을 위해, 내가 중재자 패턴에 대한 자세한 내용을 공부합니다. – xiaogang

관련 문제