我有一个应用程序,允许用户查看,操作和管理Schedule对象的集合.应用程序的不同部分需要访问此数据.我已经尝试过将这个系列变成单身,但我发现它并不是那么干净.
我最近更改为将全局数据存储在AppDelegate类中并使用:
MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; [delegate.myGlobalData doSomething];
这消除了我的全局数据成为单身人士的需要,但实际上只是利用了UIApplication单例.
真的不只有一个主视图控制器,将它存储在我的案例中是有意义的.所以我想知道人们用什么不同的策略来解决这个问题.
如果您有一个需要多个控制器可访问的中央数据模型,使用单例管理数据没有任何问题 - "sharedManager"正是该场景所要求的.这基本上是Apple用于处理联系人的地址簿API.它们使用C风格的API,但它涉及获取对共享通讯簿数据库的引用,然后在将来的调用中使用它.
使用app delegate也可以,但是你注意到它真的是一样的.您将app delegate singleton指定为数据模型的所有者,这也没关系.
NSUserDefaults可以通过这种方式被滥用,但这实际上不是它的目的.除了有点丑陋外,它还限制了您可以存储的数据类型.您自己的模型可以存储您喜欢的任何数据,但NSUserDefaults不是那么灵活.
使用SQLite或属性列表或任何将数据存储到文件的内容与如何管理它的问题完全正交.根据您的描述,单例方法听起来很合理,单例可以以对您正在使用的数据有意义的任何方式写入文件.