【发布时间】:2013-08-14 23:49:48
【问题描述】:
在我的应用程序中,我有 Singleton 对象,它应该通过应用程序启动来保存其状态。所以我需要以某种方式保存它。
我只看到两个选项:1)在应用程序终止时保存它(加上,也许,去后台); 2) 每次更改任何属性时保存它。
第一个选项看起来很糟糕,因为应用程序可能会被终止,例如,由于某些错误、内存限制或设备断电(电池电量不足)。所以我希望状态不会被保存。
第二个选项需要手动通知每次更改,或 KVO + 观察每个属性。
似乎我在这里做错了什么。也许,你可以给我一些建议或者有一些众所周知的模式(我试过谷歌,但没有发现什么特别的)。
更新:
是的,有NSUserDefaults,但是为了提高它的可用性(smth。不仅仅是键值)我会编写包装方法,所以我会以同样的问题结束(手动编码的行)。
更新 2:
CoreData 对我来说也是一个糟糕的选择:只需存储一个对象 + 插入其中还需要更多代码行。
更新3:
这不是关于“如何保存”的问题。这是关于“如何自动调用此保存(或使用更少的编码)”。所以在NSUserDefault 方式中,我们需要手动将每个属性实现为包装器。在NSCoding - 致电save 或从每个属性发布通知(从一个地方捕获并保存)。
【问题讨论】:
-
您可以使用NSUserDefaults,它会自动同步(如果您愿意,也可以手动同步)
-
也可以实现NSCoding协议来保存整个类:见this question
-
simpleBob,问题不是如何保存,而是如何使这些更改足够频繁(理想情况下是自动)以将对象存储为最新的。
-
这正是 NSUserDefaults 所做的,请参阅下面的答案
-
实际上,你不应该使用同步。来自苹果:
Because this method is automatically invoked at periodic intervals, use this method only if you cannot wait for the automatic synchronization (for example, if your application is about to exit) or if you want to update the user defaults to what is on disk even though you have not made any changes.
标签: ios state-saving change-notification