bottom bar ios multithreading cocoa-touch thread-safety uiapplication

ios - bar - -[UIApplication delegate] debe llamarse solo desde el hilo principal



status bar iphone (2)

Esta advertencia lleva a un problema grave porque realmente no puedo llamar al delegado fuera del hilo principal usando Xcode 9 beta 2. Lo extraño es que esto estaba funcionando cuando estaba usando Xcode 8.3.3.

También pensé que solo sería una buena práctica llamar a los delegados desde el hilo principal, ¿no es así? Entonces, ¿por qué esto hace que la aplicación se bloquee ahora?


En Swift, también puede usar DispatchQueue.main.async para llamar al método de control de la interfaz de usuario desde el hilo principal

DispatchQueue.main.async { YourUIControlMethod() }


Solo llámalo desde el hilo principal de esta manera.

dispatch_async(dispatch_get_main_queue(), ^{ [[UIApplication delegate] fooBar]; });

Llegar a su delegado de aplicaciones de esta manera, es una pista de que su arquitectura podría usar un poco de limpieza.

Puede llamar a los delegados desde cualquier hilo que desee. Solo necesita asegurarse de estar en el hilo principal para las llamadas UIKit. O que está en el hilo correcto que esperan sus objetos CoreData. Todo depende del contrato de API que tengan sus objetos.