Frage

Ist es möglich, Daten zu verlieren, wenn eine SQLite -DB in iOS/iPhone nicht richtig geschlossen ist?

Ich dachte darüber nach applicationWillTerminate, aber möchten sicherstellen, dass dies zuerst keine bösen Nebenwirkungen hat.

War es hilfreich?

Lösung

Größtenteils nein; SQLITE3 schreibt alles auf "Festplatten" (und nennt sie fflush/fsync/etc), bevor er zurückkehrt.

Es gibt eine große Ausnahme: Wenn es beim Schließen der Datenbank eine nicht übereinstimmende Transaktion gibt, wird sie beim nächsten Öffnen zurückgerollt.

Was genau passiert, hängt davon ab Pragma journal_mode: Wenn es sich um "Speicher" oder "Aus" handelt, ist die Datenbank wahrscheinlich beschädigt, wenn Ihre App während eines Schreibens abstürzt. ich denken Pragma Locking_Mode beeinflusst nur, was passiert, wenn Schlösser freigesetzt werden, nicht die Transaktionsintegrität.

Beachten Sie, dass -Anwendungsteg: sowieso nicht ausreichend ist! Wenn Sie UIAPPLICATIONExitSonsususpend nicht festgelegt haben, besteht das Standardverhalten auf iOS 4 und ein neuer Gerät (dh neuer als iPhone 3G/IPOD 2G) darin, -Anwendungsarbeiten zu senden: und dann Ihre App (anscheinend mit Sigstop) suspendieren. Wenn das Betriebssystem später entscheidet, dass Ihre App beenden muss, sendet es Sigkill, ohne Ihrer App weitere CPU -Zeit zu geben. Sie müssen Staat in speichern beide -applicationWillTerminate: und -applicationWillEnterBackground:; Der Hauptunterschied besteht darin, dass Sie im letzteren eine Hintergrundaufgabe beginnen können.

(Der andere Unterschied besteht darin, dass Sie möglicherweise in der Anwendung "Aufräumarbeiten" durchführen. .))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top