【问题标题】:Storing iphone application data on low memory将 iphone 应用程序数据存储在低内存上
【发布时间】:2009-08-24 19:19:47
【问题描述】:

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

用户可以玩很多不同的游戏,对于每个游戏,我都有一个记录他们所做动作的活动日志。用户可以在玩游戏时看到他们迄今为止在每个游戏中所做的动作,他们还可以在活跃和不活跃的游戏之间切换,这样他们也可以回顾过去的动作。

【问题讨论】:

  • 发布您将使用数据的目的是相关的。您希望如何访问/检索数据将影响哪个是更好的解决方案。
  • 修改了我的原始帖子以包含此信息。

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


【解决方案1】:

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

【讨论】:

  • 谢谢。我忘了提到我计划定期将数据保存在应用程序中。我只是不知道使用哪种机制更好。
【解决方案2】:

我建议几件事。

  1. 目前实际有多少数据用于任何事情?如果很有可能它没有被使用,那么保存它。

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

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

我正在开发一个应用程序,该应用程序会在此过程中创建大量数据。大多数未使用,但我不知道将使用哪些数据。我所做的是保留最有可能使用的数据的小缓存,其余的实时进入 SQLite 数据库。我的内存需求保持很小,100K 左右。过去是 megs(和崩溃)。

【讨论】:

  • 在每个游戏中,与活动游戏相关的数据以及活动日志都会被频繁使用。所有其他游戏数据将被保存。定期,在活动游戏中,我必须保留最近生成的数据。
猜你喜欢
  • 2011-09-08
  • 2013-01-05
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2010-10-01
  • 1970-01-01
相关资源
最近更新 更多