【问题标题】:iOS sharing 'global data' across view controllersiOS 跨视图控制器共享“全局数据”
【发布时间】:2015-12-17 19:45:58
【问题描述】:

我一直使用应用代理作为“全局存储桶”在各种视图控制器之间共享数据。通常我会这样做:

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

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

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

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

【问题讨论】:

    标签: ios objective-c iphone cocoa-touch sharing


    【解决方案1】:

    一种更清洁的方法,虽然不一定不同,但这样做的方法是创建一个单例类,例如AppData,您可以通过多种方式访问​​它,并且您的所有其他班级都可以使用它。它的好处是将您的应用程序特定的东西与应用程序委托的东西分开。你可以这样定义类:

    @interface AppData : NSObject // 也许你会在这里声明一些类方法... @结尾

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

    最后,您可以仅使用类方法完成很多工作,您可以将其称为 [AppData theMethod]。请记住,在类方法中没有可访问的 self

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

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

    【讨论】:

    • 是的,我忘记了单例,我一直在 Java 中使用它们..我会试试看..
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多