He implementado la siguiente NSOperation, dibujar N
vistas personalizadasNSOperation: addSubview en el hilo principal y lentitud
- (void)main {
for (int i=0; i<N; i++) {
<< Alloc and configure customView #i >>
//(customView is a UIView with some drawing code in drawrect)
[delegate.view addSubview:customView];
}
NSLog(@"Operation completed");
}
en el método drawRect del CustomView tengo
- (void)drawRect {
<<Drawing code>>
NSLog(@"Drawed");
delegate.drawedViews++;
if (delegate.drawedViews==VIEWS_NUMBER) {
[delegate allViewsDrawn];
}
}
Así que el delegado recibe la notificación cuando se dibujan todas las vistas.
El problema es que después del registro "Operación completada" transcurren aproximadamente 5 segundos antes de que pueda ver el primer registro "Dibujado".
¿Por qué sucede esto? Y en términos generales, ¿cómo debo comportarme para saber qué línea de código está tardando tanto tiempo en ejecutarse?
------ ------ EDITAR
veces (como 1 de cada 10 veces) que estaba recibiendo choques que hacen esto, porque no hay que llamar addsubview
del NSOperation, ya no es un hilo seguro. Así que cambió a
[delegate.view performSelectorOnMainThread:@selector(addSubview:) withObject:customView waitUntilDone:NO];
Ahora no tengo los accidentes más, pero el proceso toma un tiempo muy largo para ser ejecutado! Como 5 veces más que antes.
¿Por qué es tan lento?
Hola! Pregunta para usted: ¿Por qué es necesario el dispatch_async anidado? (Confío en que lo haya escrito de esa manera por una razón. Todavía no lo estoy viendo) ¡Gracias! –
Para ser sincero, encontré este código, y simplemente funciona. Realmente no sé más que esto :-) – Abramodj
¡OK, entonces! (Ahora estoy en una misión - jeje.) Gracias por publicarlo. :) –