iOS跨视图控制器共享“全局数据”

时间:2011-09-01 14:35:24

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

我一直使用app delegate作为“全局存储桶”来在各种视图控制器之间共享数据。通常我做这样的事情:

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

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

有更好的方法吗?我可以在某种全局共享区域设置一个“监听器”,如果有人在那里粘贴一个数据元素,另一个对象会得到一个“回叫”,让它知道某人有数据准备好吗? / p>

在Java中我们习惯用Observer / Observable类做这个 - 也许有类似的东西,或者更好的iOS?

1 个答案:

答案 0 :(得分:3)

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

@interface AppData : NSObject

// Perhaps you'll declare some class methods here...

@end

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

最后,你可以通过类方法完成很多工作,你会称之为[AppData theMethod]。请记住,在类方法中没有self可以访问。

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

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