Хранение данных приложения iphone в нехватке памяти - PullRequest
0 голосов
/ 24 августа 2009

У меня есть некоторые структуры данных в моем приложении, которые мне нужно сохранить после получения уведомления «didReceiveMemoryWarning». Данные представляют собой текущий журнал всех действий, которые пользователь выполнил с приложением (которое является игрой)

Данные, которые у меня есть, могут быть небольшим (возможно, несколько сотен КБ), поэтому списки не являются правильным решением.

Первая из двух возможностей - это архивирование объектов и обеспечение поддержки этих объектов протоколом NSCoding. Я не уверен, что это правильный путь для выбора.

Второй вариант, по-видимому, связан с CoreData с использованием NSManagedObjectModel и NSPersistentStoreCoordinator. Это хороший способ хранить эти объекты? Или это излишне? (Я использую образец приложения «Рецепты» от Apple для справки).

Мои объекты - это пользовательские типы объектов, которые в конечном итоге содержат 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 ]

1 голос
/ 25 августа 2009

Предупреждение, здесь. Если ваше приложение начинает получать эти сообщения, и вы используете обработчик для записи огромных объемов данных, ядро ​​может не позволить вашему приложению завершить сохранение материала, если ситуация ужасна (из POV ядра). Какой бы подход вы ни использовали в своем журнале, вы должны постепенно сбрасывать эти данные в резервное хранилище, чтобы быть уверенным в том, что при такой ситуации вы не потеряете никакие данные.

0 голосов
/ 25 августа 2009

Я бы предложил несколько вещей.

  1. Сколько данных фактически используется для чего-либо прямо сейчас? Если есть хороший шанс, что он не используется, сохраните его.

  2. Сколько можно воссоздать / реконструировать?

Взгляните на пример книги по SQLite, предоставленной Apple.

Я работаю над приложением, которое создает кучу данных по пути. Большинство не используется, но я понятия не имею, какие данные будут использоваться. Что я делаю, так это сохраняю небольшой кеш данных, которые наиболее вероятно будут использоваться, а остальное отправляется в базу данных SQLite в реальном времени Мои требования к памяти остаются очень маленькими, 100 КБ или около того. В прошлом это были меги (и вылетали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...