Как лучше всего закрыть соединение sqlite3 в obj-c? - PullRequest
0 голосов
/ 13 декабря 2011

Я открываю соединение с базой данных в AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

и закрываюсь на applicationWillTerminate

- (void)applicationWillTerminate:(UIApplication *)application
{
    /*
     Called when the application is about to terminate.
     Save data if appropriate.
     See also applicationDidEnterBackground:.
     */
    NSLog(@"Closing DB");
    if(database) sqlite3_close(database);
}

Но когда я закрываю (действительно закрываю)Приложение на симуляторе, я не получаю лог "Закрытие БД" в консоли.Это нормально?

Как лучше всего закрыть соединение sqlite3 в Objective-c?

(действительно близко означает

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

Ответы [ 2 ]

1 голос
/ 07 мая 2012

Старайтесь избегать использования метода - applicationWillTerminate:, поскольку у вас недостаточно времени (!) Для правильной работы - возможно, система перезагружается или выключается. Лучшая практика для сохранения данных и очистки неиспользуемых ресурсов (при необходимости) - вводить код в методе - applicationDidEnterBackground:.

От Apple UIApplicationDelegate Ссылка на протокол:

Ваша реализация этого метода имеет примерно пять секунд для выполнить любые задачи и вернуться. Если вам нужно дополнительное время для выполнения По окончательным задачам вы можете запросить дополнительное время выполнения у система путем вызова beginBackgroundTaskWithExpirationHandler :. В На практике вы должны вернуться из applicationDidEnterBackground: как как можно быстрее. Если метод не возвращается раньше времени Ваше приложение прекращено и удалено из памяти.

Вы должны выполнять любые задачи, связанные с настройкой вашего пользовательского интерфейса. до выхода из этого метода, но другие задачи (например, сохранение состояния) должны по мере необходимости перемещаться в параллельную очередь отправки или вторичный поток. Потому что это, скорее всего, любые фоновые задачи, которые вы начинаете в applicationDidEnterBackground: не будет работать до тех пор, пока этот метод не будет выходы, вы должны запросить дополнительное время фонового выполнения до начиная эти задачи. Другими словами, первый звонок beginBackgroundTaskWithExpirationHandler: а затем запустите задачу на очередь отправки или вторичный поток.

(с) взято из этого ответа

1 голос
/ 13 декабря 2011

Это потому, что ваше приложение не прекратило работу.Это ушло на задний план.Попробуйте добавить свой код в applicationDidEnterBackground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...