UIApplicationWillTerminate: NSNotificationCenter против делегата приложения - PullRequest
3 голосов
/ 16 февраля 2012

Это всего лишь теоретический вопрос. Она возникла из-за реальной проблемы в моем приложении, но я заново разработал проблему из приложения. Но остается вопрос:

Если в моем делегате приложения я записываю свой одноэлементный объект на диск после applicationWillTerminate:, но также использую NSNotificationCenter для вызова updateSingletonData после UIApplicationWillTerminateNotification в каком-либо контроллере представления, что произойдет первым? Будут ли мои данные записаны в синглтон, затем синглтон будет записан на диск, а затем приложение завершится? Или произойдет обратное: сериализация синглтона и , затем синглтон обновятся (хуже), или приложение просто завершится через определенное время, если сериализация займет слишком много времени (намного хуже!)?

Полагаю, это говорит о том, что я недостаточно разбираюсь в духе Springboard ... спасибо всем, кто может пролить свет на это.

Ответы [ 2 ]

4 голосов
/ 16 февраля 2012

Здесь следует отметить пару вещей:

  1. Только Apple знает порядок, в котором это произойдет, поскольку они написали код, который это делает.

  2. Вам не нужно заботиться о порядке, в котором это произойдет. Если вам все равно, то вы плохо спроектировали свой код.

На самом деле, вы можете пойти ипроверьте, в каком порядке это происходит - для вашего конкретного устройства, для вашей конкретной версии iOS и т. д.

Но на самом деле вам не важно, в каком порядке они происходят. Судя по звукам, вы должны быть либозапуск контроллера представления для записи данных перед сохранением в applicationWillTerminate: или разрешение контроллеру представления сохранять после записи его данных.

1 голос
/ 15 марта 2017

Этот вопрос старый, и ответ @mattjgalloway является верным с точки зрения качества кода, но ради знаний я только что увидел в документах, что уведомление отправлено после UIApplicationDelegate метод называется (выделение мое):

После вызова этого метода приложение также отправляет уведомление UIApplication завершит работу, чтобы дать заинтересованным объектам возможность ответить на переход.

https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623111-applicationwillterminate

...