UIView y UITableView, reloadData extraña latencia

Tengo algo extraño con el repintado de mi controlador de vista. El controlador de vista contiene un UITableView y un control giratorio.

Yo tengo unupdateFeed función (disparada por un IBOutlet) que trae elhilandero frente a mi controlador de vista y pone undoUpdate funcionar en un NSOperationQueue.

- (void)updateFeed {
    [self showMuar];
    ResourceLoader *loader = [ResourceLoader sharedResourceLoader];
    [loader updateFeed:[self feed] forDelegate:self];
    isReloading = YES;
}
- (id<ResourceToken>)updateFeed:(Feed *)feed forDelegate:(id)delegate {
     return [self queueOperation:[[Operation alloc] initWithObject:feed withSelector:@selector(doUpdate) delegate:delegate]];
}

losdoUpdate la función llama aanalizador (startParserWithAdd :) función que recupera contenido de internet y formatea este contenido para UITableView y luego realiza un[tableView reloadData].

- (NSError *)doUpdate {
    [self startParserWithAddThreaded:NO];
    return nil;
}
- (void)startParserWithAddThreaded:(BOOL)add {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    [self startParserWithAdd:add];
    [pool release];
}

... en algún lugar de la función del analizador (startParserWithAdd :)

[tableView setDataSource:self];
[tableView reloadData];

Una vez eldoUpdate hecho sin errores y gracias a mi clase de Operación laloadingResourceDidFinish se realiza en mi controlador de vista.loadingResourceDidFinish envía elhilandero en el fondo.

- (void)loadingResourceDidFinish:(Feed*)f {
    isReloading = NO;
    [self loadingResourceDidFinishPostAction];
}
- (void)loadingResourceDidFinishPostAction {
        [self hideMuar];
}
- (void)hideMuar {
    [loadingIndicator stopAnimating];
    [self.view sendSubviewToBack:muar];
}

Todo funciona bien, pero la ruleta se envía al fondo aproximadamente 4 segundos después de laloadingResourceDidFinish Está terminado.

Para ser exactos, muar es una UIView con opacidad que contiene la ruleta. ¡Solo quería abstraer la complejidad en mi explicación original!

Intenté NSLog esto y parece que nada se vuelve a pintar hasta que se complete reloadData. Creo que es un problema de repintado porque si apago mi iPhone en horizontal justo después del final deloadingResourceDidFinish, todo está bien, la ruleta desaparece.

Traté de eliminar el NSAutoreleasePool en elanalizador funciona pero no cambia.

Seguramente no entendí algo, pero no sé qué es ...

editar

Cambié el código para hacerlo menos confuso. El reloadData de UITableView ahora se coloca aquí:

- (void)loadingResourceDidFinishPostAction {
    [tableView reloadData];
    [self hideMuar];
    NSLog(@"loadingResourceDidFinishPostAction end");
}

Y para depurar:

- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"cellForRowAtIndexPath %i", indexPath.row);
        ...

Entonces, ¿por qué la primera celda se vuelve a pintar solo 5 segundos después del final de loadingResourceDidFinishPostAction?

2010-09-02 10:15:35.279 myapp[9632:5b03] loadingResourceDidFinishPostAction end
2010-09-02 10:15:40.208 myapp[9632:5b03] cellForRowAtIndexPath 0
2010-09-02 10:15:40.697 myapp[9632:5b03] cellForRowAtIndexPath 1
2010-09-02 10:15:40.878 myapp[9632:5b03] cellForRowAtIndexPath 2

Es lo mismo con mi iPhone 3G y el simulador de iPhone 4.

Respuestas a la pregunta(2)

Su respuesta a la pregunta