您将全局应用程序数据放在iPhone应用程序中的哪个位置?

时间:2009-02-05 13:38:27

标签: iphone

我有一个应用程序,允许用户查看,操作和管理Schedule对象的集合。应用程序的不同部分需要访问此数据。我已经尝试过将这个系列变成单身,但我发现它并不是那么干净。

我最近更改为将全局数据存储在AppDelegate类中并使用:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.myGlobalData doSomething];

这消除了我的全局数据成为单身人士的需要,但实际上只是利用了UIApplication单例。

实际上不只有一个主视图控制器将它存储在我的案例中是有意义的。所以我想知道人们用什么不同的策略来解决这个问题。

2 个答案:

答案 0 :(得分:6)

如果您有一个需要多个控制器可访问的中央数据模型,使用单例管理数据没有任何问题 - “sharedManager”正是该场景所要求的。这基本上是Apple用于处理联系人的地址簿API。它们使用C风格的API,但它涉及获取对共享通讯簿数据库的引用,然后在将来的调用中使用它。

使用app delegate也可以,但是你注意到它真的是一样的。您将app delegate singleton指定为数据模型的所有者,这也没关系。

NSUserDefaults可能会以这种方式被滥用,但这并不是它的目的。除了有点丑陋外,它还限制了您可以存储的数据类型。您自己的模型可以存储您喜欢的任何数据,但NSUserDefaults不是那么灵活。

使用SQLite或属性列表或任何将数据存储到文件的内容与如何管理它的问题完全正交。根据您的描述,单例方法听起来很合理,单例可以以对您正在使用的数据有意义的任何方式写入文件。

答案 1 :(得分:4)

许多人将所有内容存储在AppDelegate中,并通过[[UIApplication sharedApplication]委托]访问数据。

如果数据应该保留,您也可以使用NSUserDefaults单例。

如果数据很大,也许你需要SQLite。

这是您提出的“全球”数据。

如果您的视图控制器是在树中组织的,更好的方法是将所需数据从父UIViewController传递到子UIViewController。