Является ли инициализация стека базовых данных в фоновом потоке хорошим выбором при проектировании? - PullRequest
1 голос
/ 21 марта 2011

Привет, пользователи Stackoverflow,

Я пытаюсь оптимизировать время запуска приложения для iphone (т. Е. Сделать первый вид как можно скорее, как только приложение откроется). Раздел, который я хочу оптимизировать, - это инициализация стека базовых данных (контекст управляемого объекта, координатор постоянного хранилища и т. Д.) В делегате приложения. Я подумала о двух способах решения этой проблемы и задаюсь вопросом, что вы думаете (плюсы / минусы) относительно этих решений (или других, которые вы можете иметь)?

Примечание: Базовый стек данных инициализируется в делегате приложения по причинам, указанным в Где разместить «Базовый стек данных» в приложении Cocoa / Cocoa Touch

Решение 1 (мой предпочтительный):

Инициализация стека основных данных в фоновом потоке из делегата приложения. Это позволит ускорить инициализацию приложения и быстрее отобразить окно / представление.

Решение 2:

Ленивый экземпляр Базового стека данных, когда контроллеру представления требуется доступ к Базовому стеку данных. Мне нравится эта идея, однако, базовый стек данных должен быть инициализирован в делегате приложения, а затем передан в каждом контроллере представления, который требует этого.

Примечание : Это решение нарушает соглашение об инициализации основного стека данных в делегате приложения.

С уважением,

1 Ответ

2 голосов
/ 21 марта 2011

Если вы посмотрите на стандартные базовые данные, использующие шаблоны, вы увидите, что стек не инициализируется до тех пор, пока некоторые контроллеры представления не вызовут managedObjectContext делегата приложения.Таким образом, базовый стек данных не инициализируется до тех пор, пока не будет загружено представление, требующее управляемогоObjectContext, и не начнет настраиваться самостоятельно.

Фактическая инициализация стека очень легкая и быстрая.Базовые данные ничего не делают, пока вы не начнете активно генерировать граф объектов и не будете читать и записывать в постоянное хранилище.Простая инициализация стека занимает очень и очень мало времени.

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

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

...