Como definir a exibição acessória da célula do modo de exibição de tabela para manter um UIImageView inicializado anteriormente?

Digamos que eu tenho uma propriedade no meu controlador de exibição, definida da seguinte maneira:

@property (nonatomic, retain) UIImageView *checkmarkOffAccessoryView;

I @synthesize isso na implementação,release em-dealloc e inicialize-o-viewDidLoad do seguinte modo:

self.checkmarkOffAccessoryView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmarkOff.png"]] autorelease];

Por enquanto, tudo bem.

Quando eu o uso no meu delegado de exibição de tabela como uma exibição acessória para várias células, duas coisas acontecem:

Apenas a visualização acessória de uma célula mostra a imagemA interface do usuário do aplicativo congela.

O aplicativo não falha, o mais próximo que posso dizer, a interface do usuário simplesmente não responde. Isso é tanto no simulador quanto no dispositivo.

Aqui está como eu uso a propriedade inicializada com meu celular:

- (UITableViewCell *) tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // initialize or dequeue cell...

    if (condition)
        cell.accessoryView = self.checkmarkOffAccessoryView;
    else
        cell.accessoryView = nil;
}

Com o código mencionado acima, apenas uma célula mostra a visualização acessória e a interface do usuário congela.

Se eu inicializar oUIImageView instância diretamente no método delegado, recebo todas as células que satisfazem a condição, mostrando a visualização acessória e não sofro o congelamento da interface do usuário:

- (UITableViewCell *) tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // initialize or dequeue cell...

    if (condition)
        cell.accessoryView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmarkOff.png"]] autorelease];
    else
        cell.accessoryView = nil;
}

Meu objetivo é inicializar o mínimo possível de objetos e reutilizar umUIImageView. Estou curioso para saber por que o primeiro pedaço de código é problemático e o que eu poderia fazer para corrigir isso.

Parece que o celularaccessoryView propriedade deve apenas incrementar oretain contagem deself.checkmarkOffAccessoryView mas parece que estou perdendo alguns detalhes.

O que eu tenho esquecido? Obrigado pelo teu conselho.

EDITAR

Eu penso isso:

self.checkmarkOffAccessoryView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmarkOff.png"]] autorelease];

é o mesmo que:

UIImageView *uncheckedView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmarkOff.png"]];
self.checkmarkOffAccessoryView = uncheckedView;
[uncheckedView release];

De qualquer maneira, sinto o mesmo sintoma de congelamento.

questionAnswers(4)

yourAnswerToTheQuestion