我在视图控制器之间传输数据时遇到问题。我现在正在开发一个小应用程序,它有一个主视图控制器,在这个视图控制器中,用户可以更改一些全局数据,所有其他视图控制器都将使用这些数据从 Internet 获取数据。因此,当全局数据发生变化时,我需要告诉其他视图控制器更新数据。
问题是当全局数据发生变化时如何告诉其他视图控制器?
我知道我应该使用 NSNotificationCenter 来解决这个问题,但我觉得通知对于所有的视图控制器来说就像一个外国人。
我想要做的是添加一个 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
效果很好,通过这个管理器我可以得到任何我想要的视图控制器,并且我可以在视图控制器之间轻松传输全局数据,但问题是我不知道如何正确管理内存,在方法中 [ViewControllerManager addViewController: ]
,我保留了视图控制器,但是我不知道什么时候释放它,所以这个viewController永远不会被释放......