在低内存中存储iphone应用程序数据

时间:2009-08-24 19:19:47

标签: iphone objective-c cocoa-touch core-data

我的应用程序中有一些数据结构,我需要在收到'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;
}

用户可以玩一堆不同的游戏,对于每个游戏,我都有一个他们所做的动作的活动日志。用户可以看到他们在每个游戏中播放时到目前为止所做的移动,并且他们也可以在活动和播放之间切换。不活跃的游戏,所以他们也可以审查过去的动作。

2 个答案:

答案 0 :(得分:1)

警告,这里。如果您的应用程序开始收到这些消息,并且您正在使用处理程序写出大量数据,那么如果情况严重(来自内核的POV),内核可能不会让您的应用程序完成保存。无论您对日志使用何种方法,都应该逐步将这些数据滴加到后备存储中,这样您就可以确信在发生这种情况时不会丢失任何数据。

答案 1 :(得分:0)

我建议了几件事。

  1. 目前有多少数据实际用于任何事情?如果有很好的机会它没有被使用然后保存它。

  2. 可以重建/重建多少?

  3. 看一下Apple提供的SQLite书籍示例。

    我正在开发一款可以在此过程中创建大量数据的应用。大多数都没有使用,但我不知道将使用哪些数据。我所做的是保留最有可能使用的数据的小缓存,其余的实时进入SQLite数据库。我的记忆要求非常小,100K左右。在过去,它是megs(和崩溃)。