gpt4 book ai didi

objective-c - 我如何在 Objective-C(iOS 6 应用程序)中拥有全局可用的实例?

转载 作者:行者123 更新时间:2023-11-29 13:24:21 25 4
gpt4 key购买 nike

全新的 objective-C 和 iOS 开发(来自 C 背景)。我正在使用标签栏 Controller 编写一个应用程序并使用多个 View 。我想在应用程序启动时初始化一个对象,然后让该实例可用于所有 View 。

目前在我的 AppDelegate.m 中,我有:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
id myObject;
myObject = [[MYObject alloc] init];

return YES;
}

如何为我的其他 View Controller 访问 myObject?

谢谢! (请原谅新手问题)

最佳答案

正如其他人所建议的,有很多选择:

单例模式:

+ (id)sharedFoo {
static dispatch_once_t pred;
static FooClass *cSharedInstance = nil;

dispatch_once(&pred, ^{ cSharedInstance = [[super alloc] init]; });
return cSharedInstance;
}

...并在整个过程中访问对象[Foo sharedFoo]。一些开发人员避开单例类,因为当开发人员意识到越来越多的对象需要成为全局对象时,它不仅冒着创建“上帝类”的风险,而且还冒着创建此类类万神殿的风险。通常这种冲动与对应用程序设计的不完整思考有关。单例思想的一种变体使用单例来保存对所有全局数据的引用,例如[MyApplicationData sharedData]...就个人而言,我认为它比为此目的使用 UIApplication 的委托(delegate)更简洁。

依赖注入(inject):

由于您使用的是 UITabBarController 设计,您可以使用依赖注入(inject)(通过 UITabBarControllerDelegate 方法,例如 tabBarController:didSelectViewController:)来传播用户选择选项卡时的对象,然后将其进一步传播到 Controller 层次结构中。

作为所有者的应用程序委托(delegate):

与单例类一样,这有可能创建一个职责过多的类。 UIApplication 委托(delegate)不仅负责应用程序生命周期,它还负责各种其他不相关的状态和行为。然而,这种模式在我看到的代码中被广泛使用。

关于objective-c - 我如何在 Objective-C(iOS 6 应用程序)中拥有全局可用的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511804/

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