2010-11-21 3 views

Répondre

3

Pour la plupart, non; sqlite3 écrit tout sur "disk" (et appelle fflush/fsync/etc selon le cas) avant de revenir.

Il existe une exception majeure: S'il y a une transaction non validée lorsque vous fermez la base de données, elle sera annulée la prochaine fois que vous l'ouvrirez.

Ce qui se passe exactement dépend de PRAGMA journal_mode: si c'est "memory" ou "off", la base de données est susceptible d'être corrompue si votre application tombe en panne pendant une écriture. I pensePRAGMA locking_mode affecte seulement ce qui se passe lorsque les verrous sont libérés, et non l'intégrité transactionnelle.

Notez que -applicationWillTerminate: n'est pas suffisant malgré tout! Si vous n'avez pas défini UIApplicationExitsOnSuspend, le comportement par défaut sur iOS 4 et un périphérique nouveau (c'est-à-dire plus récent que iPhone 3G/iPod 2g) consiste à envoyer -applicationWillEnterBackground: puis à suspendre votre application (apparemment avec SIGSTOP). Si le système d'exploitation décide par la suite que votre application doit quitter, il envoie SIGKILL sans laisser plus de temps à votre application. Vous devez enregistrer l'état dans à la fois-applicationWillTerminate: et -applicationWillEnterBackground:; La principale différence est que vous pouvez démarrer une tâche d'arrière-plan dans ce dernier. L'autre différence est que vous pouvez effectuer un "nettoyage" dans -applicationWillTerminate: cela ne devrait pas se produire lorsque vous êtes simplement passé en arrière-plan, même si libérer de la mémoire lorsque votre application est sur le point de quitter est en grande partie perte de temps processeur.)

Questions connexes