¿Está bien crear una UIView en un hilo de background?

Sé que UIView no son seguros para subprocesss, así que no puedo agregar una vista en un subprocess de background, para evitar esto, ¿es correcto crear una UIView en un subprocess de background y luego agregarlo en el subprocess principal?

Nota: la razón por la que no hago esto en el hilo principal es porque mi código real es mucho más complejo y, por lo tanto, toma un time crear todas las vistas y completar los valores. No quiero que la interfaz de usuario no responda cuando hago esto, así que estoy tratando de solucionar esto.

por ejemplo..

-(void)addLabel//called on background thread { UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0,0,40,100)]; [label setText:@"example"] [self.view performSelector:@selector(addSubview:) onThread:[NSThread mainThread] withObject:example waitUntilDone:YES]; } 

Gracias por adelantado.

Desde UIView :

Consideraciones de subprocesamiento

Las manipulaciones a la interfaz de usuario de su aplicación deben ocurrir en el hilo principal. Por lo tanto, siempre debe llamar a los methods de la class UIView desde el código que se ejecuta en el hilo principal de su aplicación. La única vez que esto puede no ser estrictamente necesario es cuando se crea el object de vista en sí, pero todas las demás manipulaciones deben ocurrir en el hilo principal.

La llamada a initWithFrame: explícitamente no es segura. Es probable que la llamada a setText: no sea segura para subprocesss, ya que se incluye en la cláusula "manipulaciones". Estos ciertamente no se prometen ser seguro para hilos.

Haga su trabajo para descubrir los datos en un hilo de background. Luego crea tus vistas en el hilo principal. Si hay una gran cantidad de vistas, puede intentar dividir el trabajo usando varias llamadas dispatch_async() en la queue principal. Esto puede permitir que la interfaz de usuario permanezca receptiva; No he experimentado mucho con eso.

También puede considerar cambiar de UIView a CALayer donde sea posible. La CALayer trabajo de CALayer se puede hacer en subprocesss de background. Si tiene un gran número de visitas, probablemente sea ineficiente de todos modos. Si es solo que lleva mucho time calcular los datos de las vistas, eso sugiere que no está separando correctamente la información del model y la vista. Las classs del Modelo deben calcular todo lo que se necesita independientemente de crear las Vistas.

Utilizo Xcode Versión 9.0 beta 3 (9M174d), recibiendo una advertencia.

[UView init] debe llamarse desde el hilo principal solamente

Entonces creo que deberías crear UI en el hilo principal mejor

Muestra la image a continuación:

introduzca la descripción de la imagen aquí

La Guía de dibujo e printing establece:

Importante Las classs UIKit generalmente no son seguras para subprocesss. Todas las operaciones relacionadas con el dibujo se deben realizar en el hilo principal de su aplicación.

Por lo tanto, según lo entiendo, parece que el único problema está relacionado con "operaciones relacionadas con el dibujo". Si suponemos que una class correcta solo ejecuta dicha operación en su método drawRect: método, entonces el enfoque que sugiere debería estar bien.