2009-08-24 68 views
0

我的应用程序中有一些数据结构,我需要在收到'didReceiveMemoryWarning'通知后坚持。该数据是用户使用应用程序(这是一款游戏)执行的所有操作的运行日志。在低内存上存储iphone应用程序数据

我拥有的数据可能不是很少(可能>几百KB),因此plists不会似乎不是正确的解决方案。

两种可能性中的第一种是归档对象并使这些对象支持NSCoding协议。我不确定这是否是正确的选择路径。

第二个选项似乎与CoreData,使用NSManagedObjectModel和NSPersistentStoreCoordinator。这是存储这些对象的好方法吗?或者它是矫枉过正? (我使用苹果公司的'食谱'示例应用程序作为参考)。

我的对象是最终容纳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

这将是相关的发布你要使用的数据。如何访问/检索数据将影响哪个更好的解决方案。 – Jacob 2009-08-25 11:03:07

+0

修改了我的原始文章以包含此信息。 – 2009-08-25 17:54:00

回答

1

警告,在这里。如果您的应用程序开始获取这些消息,并且您正在使用处理程序来写出巨大的数据,则内核可能不会让您的应用程序在情况严重时(从内核的POV)完成保存任务。无论您使用何种方法处理日志,您都应该逐渐将这些数据输出到后备存储区,这样您可以确信,如果发生这种情况,您不会丢失任何数据。

+0

谢谢你。我忘记提及我正在计划定期在应用中保存数据。我只是不知道哪一个更好的使用机制。 – 2009-08-24 21:32:36

0

我会建议几件事情。

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

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

查看Apple提供的SQLite书籍示例。

我正在创建一个应用程序,可以创建一路上的数据。大多数不使用,但我不知道哪些数据将被使用。我所做的是保留一个最有可能使用的数据的小缓存,其余的数据将实时传送到SQLite数据库。我的记忆需求非常小,100K左右。过去它是megs(和崩溃)。

+0

在每个游戏中,经常使用与活动游戏以及活动日志相关的数据。所有其他游戏数据将被保存。定期地,在主动游戏中,我必须坚持最近生成的数据。 – 2009-08-25 18:14:48