我的应用程序中有一些数据结构,我需要在收到'didReceiveMemoryWarning'通知时继续存在。数据是用户使用应用程序执行的所有操作(即游戏)的运行日志
我所拥有的数据可能不是很少(可能>几百KB),所以plist似乎不是正确的解决方案。
两种可能性中的第一种是归档对象并使这些对象支持NSCoding协议。我不确定这是否是正确的选择途径。
第二个选项似乎是CoreData,使用NSManagedObjectModel和NSPersistentStoreCoordinator。这是存储这些对象的好方法吗?还是有点矫枉过正? (我正在使用Apple的'Recipes'示例应用程序作为参考)。
我的对象是自定义对象类型,最终包含NSString,NSNumber,NSInteger和其他简单类型。
我的一些数据类型示例:
// this the base object I need to start with to persist
@interface MyDataObject : NSObject
{
MyScore *aScore;
// Contains an object of type 'MyAction'
NSMutableArray *allActions;
}
@interface MyScore : NSObject
{
NSInteger currentScore;
NSDate lastUpdated;
}
@interface MyAction
{
NSNumber *actionId;
NSString *description
MyUser *associatedUser;
}
@interface MyUser
{
NSNumber *id;
NSString *name;
NSString *email;
}
用户可以玩一堆不同的游戏,对于每个游戏,我都有一个他们所做的动作的活动日志。用户可以看到他们在每个游戏中播放时到目前为止所做的移动,并且他们也可以在活动和播放之间切换。不活跃的游戏,所以他们也可以审查过去的动作。
答案 0 :(得分:1)
警告,这里。如果您的应用程序开始收到这些消息,并且您正在使用处理程序写出大量数据,那么如果情况严重(来自内核的POV),内核可能不会让您的应用程序完成保存。无论您对日志使用何种方法,都应该逐步将这些数据滴加到后备存储中,这样您就可以确信在发生这种情况时不会丢失任何数据。
答案 1 :(得分:0)
我建议了几件事。
目前有多少数据实际用于任何事情?如果有很好的机会它没有被使用然后保存它。
可以重建/重建多少?
看一下Apple提供的SQLite书籍示例。
我正在开发一款可以在此过程中创建大量数据的应用。大多数都没有使用,但我不知道将使用哪些数据。我所做的是保留最有可能使用的数据的小缓存,其余的实时进入SQLite数据库。我的记忆要求非常小,100K左右。在过去,它是megs(和崩溃)。