UIApplicationWillTerminate:NSNotificationCenter vs Aplicación Delegado
-
25-10-2019 - |
Pregunta
Esto es sólo una pregunta teórica.Nació a partir de un problema real en mi aplicación, pero me re-diseñado el problema de la aplicación.Pero la pregunta sigue siendo:
Si en mi aplicación delegado escribo mi objeto singleton a disco en applicationWillTerminate:
pero también el uso de NSNotificationCenter
para llamar updateSingletonData
en UIApplicationWillTerminateNotification
en algunos controlador de vista, que pasará primero?¿Mis datos se escriben en el singleton, entonces el singleton se escriben en el disco, a continuación, la aplicación termina?O será que la inversa de suceder, con el singleton de la serialización y entonces el singleton actualizado (peor), o la aplicación acaba de terminar después de una cierta cantidad de tiempo si la serialización toma demasiado tiempo (mucho peor!)?
Supongo que esto demuestra mi falta de entendimiento de las entrañas de Trampolín...gracias a cualquiera que pueda arrojar algo de luz aquí.
Solución
Un par de cosas a tener en cuenta aquí:
Solo Apple sabe el orden en que sucederán, ya que escribieron el código que lo hace.
No debe preocuparse por el pedido en el que sucederán. Si le importa, entonces ha diseñado su código mal.
En realidad, puede ir y verificar en qué pedido ocurre: para su dispositivo en particular, para su versión de iOS en particular, etc.
Pero realmente, no debería importarle en qué orden se encuentran. Por los sonidos de la misma, debería estar disparando al controlador de vista para escribir los datos antes de guardar applicationWillTerminate:
, o dejar que el controlador de vista maneje el guardar después de que haya escrito sus datos.
Otros consejos
Esta pregunta es de la vieja y la respuesta de @mattjgalloway es correcta en términos de la calidad del código, pero, por el bien del conocimiento, la he visto en la documentación que la notificación se publica después de el UIApplicationDelegate
el método se llama (el énfasis es mío):
Después de llamar a este método, la aplicación también envía un UIApplicationWillTerminate notificación de brindar a los objetos de una oportunidad para responder a la transición.
https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623111-applicationwillterminate