Разработка под iOS: как я могу сократить использование памяти Core Data? - PullRequest
0 голосов
/ 17 января 2011

Я очень новичок в Core Data и все еще изучаю, как все это работает под капотом. Моя иерархия модели Core Data содержит профиль пользователя, который содержит набор из десяти различных уровней, использующих отношение один-ко-многим, причем каждый уровень содержит 30 различных головоломок, в которых также используется отношение один-ко-многим.

UserProfile (x1) -> Level (x10) -> Puzzle (x30), for a grand total of 311 objects per user profile

Модели уровней и головоломок используются для хранения прогресса пользователя, когда пользователь последовательно решает головоломки. Когда игра запускается в первый раз, она считывает все уровни и данные головоломок из списка и генерирует объекты Core Data (строки таблицы), которые будут использоваться для хранения прогресса пользователей во время игры. Другими словами, список объектов Core Data не увеличивается по мере того, как пользователь играет в игру, вместо этого он все создается в начале, а свойства объектов меняются по мере того, как пользователь играет в игру. Я подозреваю, что это неэффективно, но мои вопросы остаются прежними ...

  1. Когда я загружаю профиль пользователя из Core Data, будет ли также загружать в память все десять уровней, а также 30 головоломок для каждого уровня? Я спрашиваю, потому что мне, очевидно, не нужны все эти данные, если игрок играет только по одному уровню за раз.
  2. Если все данные уровня и головоломки загружаются в память при загрузке профиля пользователя, как я могу «лениво» загружать данные уровня и головоломки по мере необходимости?
  3. Когда я запускаю свою игру с помощью инструмента Allocations, он показывает, что он использует 6 МБ общей памяти, когда приложение полностью загружено и находится в главном меню. Очевидно, что использование памяти увеличивается по мере того, как пользователь углубляется в стек навигации. 6MB считается «большим» объемом памяти для только что запущенного приложения?
  4. Я заметил, что когда я закомментирую строку кода, которая загружает профиль пользователя из базовых данных, все еще используется 6 МБ. Означает ли это, что влияние, которое мои объекты базовых данных оказывают на память, незначительно?

Я прошу прощения, если это возмутительные вопросы, и я прошу прощения за их длину, и большое спасибо за вашу мудрость! Я возвращаюсь к документам по основным данным прямо сейчас, я просто решил опубликовать эти вопросы, продолжая самообучение.

1 Ответ

1 голос
/ 17 января 2011

Это ответ на ваш вопрос о «ленивой нагрузке». Основные данные для многих отношений. Они Lazy Load?

Я бы не стал беспокоиться о 6 МБ памяти, если вы не видите проблемы с производительностью. Вы всегда можете проверить это с помощью прилагаемых утилит.

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