Основываясь на вашем опыте, для приложения iOS, в котором используется только один NMPanagedObjectContext основного потока, лучший способ сохранить пользовательские настройки и кэшированные данные с сервера на диск в отношении надежности и производительности?
Я вижу следующие варианты:
- сохранить контекст в конце каждого изменения.
- сохранить контекст только при выходе приложения (например, в образцах Apple)
- сохранить контекст при выходе из приложения, перейти на задний план или стать неактивным (например, входящий телефонный звонок)
- добавить таймер, чтобы время от времени сохранять контекст, если он имеет какие-либо изменения.
- вызовите специально подготовленную задержанную процедуру сохранения, которая соберет вместе вызовы для сохранения контекста, чтобы убедиться, что они не запускаются слишком часто.
В настоящее время мы используем 1-й вариант, поэтому могу сказать, что надежность этого очень хорошая, данные сохраняются даже после завершения Xcode приложения во время сеанса отладки, но производительность может пострадать, когда приложение становится все более сложным, esp, когда изменения в БД могут произойти в любой момент потока приложений из-за асинхронной загрузки данных с сервера.
С другой стороны, сохранение при определенных событиях приложения (выход, переход на фон и т.д.) даст лучшую производительность, но можете ли вы сказать по своему опыту, что достаточно убедиться, что пользователь не потеряет данные?