gpt4 book ai didi

iOS 跨 View Controller 共享 'global data'

转载 作者:可可西里 更新时间:2023-11-01 03:33:19 26 4
gpt4 key购买 nike

我一直在使用 app delegate 作为“全局存储桶”来在各种 View Controller 之间共享数据。通常我会这样做:

My_AppDelegate *appDelegate = (My_AppDelegate *)[[UIApplication sharedApplication] delegate];

然后,我会将数据粘贴到 appDelegate 中,并使用另一个 View Controller 从 appDelegate 中获取数据。不知何故,这似乎笨拙且不合适(尽管它确实有效)。

有没有更好的方法?我可以在某种全局共享区域上设置一个“监听器”,如果有人在其中粘贴数据元素,另一个对象会得到一个“回调”,让它知道有人已经准备好数据了吗?

在 Java 中,我们过去常常使用 Observer/Observable 类来做到这一点 - 也许有类似的东西,或者在 iOS 中更好?

最佳答案

一种更简洁但不一定不同的方法是创建一个单例类,例如AppData,您可以通过多种方式访问​​它,并且您的所有其他类都可以使用它。它的好处是将您的应用程序特定内容与应用程序委托(delegate)内容分开。您可以这样定义类:

@interface AppData : NSObject// Perhaps you'll declare some class methods here...@end

我常做的一件事是在这样的类上定义类方法以访问,例如,设置值、特定于应用程序的常量或其他单例对象。有很多可能性。

最后,您可以仅使用类方法完成很多工作,您可以调用类似 [AppData theMethod] 的方法。请记住,在类方法内部没有可访问的 self

更进一步,您可以为 AppData 类定义 ivars,然后管理 AppData 的单例实例。使用类方法,例如+sharedInstance,获取单例的句柄,然后您可以在该单例上调用方法。例如,[[AppData sharedInstance] someMethod:myArgument]。您可以在 +sharedInstance 的实现中管理单例的实际创建,该方法最终返回。

我不确定我是否会称这种方法为“最佳实践”,但我发现这种模式非常方便。

关于iOS 跨 View Controller 共享 'global data',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271889/

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