2010-11-21 2 views

ответ

3

По большей части, нет; sqlite3 записывает все на «диск» (и вызывает по умолчанию fflush/fsync/etc), прежде чем возвращаться.

Существует одно большое исключение: если при закрытии базы данных выполняется незафиксированная транзакция, она будет отброшена при следующем открытии.

Точно, что происходит, зависит от PRAGMA journal_mode: если это «память» или «выключено», база данных, вероятно, будет повреждена, если ваше приложение выйдет из строя во время записи. I думаюPRAGMA locking_mode влияет только на то, что происходит, когда блокировки освобождаются, а не целостность транзакций.

Отметьте, что -применениеWillTerminate: Недостаточно в любом случае! Если вы не установили UIApplicationExitsOnSuspend, поведение по умолчанию на iOS 4 и новое достаточно устройство (то есть более новое, чем iPhone 3G/iPod 2g) должно отправить -applicationWillEnterBackground: а затем приостановить действие приложения (по-видимому, с помощью SIGSTOP). Если позже ОС решит, что ваше приложение должно выйти, оно отправляет SIGKILL, не добавив ваше приложение больше времени процессора. Необходимо сохранить статус в :-applicationWillTerminate: и -applicationWillEnterBackground:; основное отличие состоит в том, что вы можете запустить фоновое задание в последнем.

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

Смежные вопросы