gpt4 book ai didi

ios - 如何在 iOS 中管理 viewController

转载 作者:行者123 更新时间:2023-11-29 03:43:45 28 4
gpt4 key购买 nike

我在 View Controller 之间传输数据时遇到问题。我现在正在开发一个小型应用程序,它有一个主视图 Controller ,在这个 View Controller 中,用户可以更改一些全局数据,所有其他 View Controller 将使用这些数据从互联网获取数据。因此,当全局数据发生变化时,我需要告诉其他 View Controller 更新数据。

问题是全局数据发生变化时如何通知其他 View Controller

我知道我应该使用 NSNotificationCenter 来解决这个问题,但我觉得通知对于所有 View Controller 来说就像一个外国人。

我想要做的是添加一个ViewControllerManager来管理所有的viewController。首先,我将所有需要使用全局数据的 View Controller 添加到管理器中。然后,当全局数据发生变化时,我可以通过管理器找到这些 View Controller ,并通知它们直接更新全局数据。

这是我的@界面。

@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

效果很好,通过这个管理器我可以获得任何我想要的 View Controller ,并且我可以在 View Controller 之间轻松传输全局数据,但问题是我不知道如何正确管理内存 ,在方法[ViewControllerManager addViewController:]中,我保留了viewController,但我不知道什么时候释放它,所以这个viewController永远不会被dealloc...

最佳答案

您可以释放的最新时间点是在您的管理器类的 dealloc 方法中。如果您在添加这些 Controller 时将它们存储在数组中,则该数组也会保留它们。这可能是一种仅保留和释放该阵列而不是 Controller 的解决方案。当从数组中删除一个项目时,数组会进行必要的释放。此外,当数组消失(释放)时,其中的项目也会消失(自动)。

顺便说一下,我认为你正在做的事情被称为中介模式。 Controller 仅与中心对象对话,而不与彼此对话。只有调解人知道所有参与者。

关于ios - 如何在 iOS 中管理 viewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17996229/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com