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.