根据您的经验,对于仅使用一个主线程NSManagedObjectContext的iOS应用程序,在可靠性和性能方面,将用户设置和缓存数据从服务器持久存储到磁盘的最佳方法是什么?
我看到下一个选项:
目前我们使用第一个选项,所以我可以说它的可靠性非常好,即使在Xcode在调试会话期间终止应用程序之后也会保存数据,但是当应用程序变得越来越复杂时,性能可能会受到影响,尤其是 当由于从服务器异步加载数据而在应用程序流的任何时刻发生对DB的更改.
另一方面,在应用程序的某些事件中保存(退出,转到后台等)将提供最佳性能,但是根据您的经验,您是否足以确保用户不会丢失数据?
我认为你应该经常保存,因为它更可靠(如果应用程序崩溃你不会丢失数据)并且你可以节省由修改但未使用的对象占用的内存.
与此同时,您不希望使用保存请求来压倒db.
我的建议是在接口文件中公开两个方法,并根据你的情况选择你要调用的方法.
- (void)save {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(save) object:nil];
[_storage save:nil];
}
- (void)setNeedsSave {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(save) object:nil];
[self performSelector:@selector(save) withObject:nil afterDelay:1.0];
}
Run Code Online (Sandbox Code Playgroud)
另外,您是否考虑过使用私有队列的第二个托管对象上下文?您可以将其设置为父上下文并在后台保存/获取数据:http://www.cocoanetics.com/2012/07/multi-context-coredata/
将上下文保存在UIApplicationDelegate方法中applicationDidEnterBackground:,applicationWillTerminate:对我来说一直很好。我还会在特殊情况下保存,例如大数据导入或类似的情况。
| 归档时间: |
|
| 查看次数: |
5203 次 |
| 最近记录: |