Gerar automaticamente identificadores de reutilização UITableViewCell

Identificadores de reutilização são exigidos por UITableViewCell para oferecer suporte ao desenfileiramento de células reutilizáveis, identificando exclusivamente os tipos de células. Normalmente, você cria um identificador de reutilização de string exclusivo para cada tipo de célula que possui, o que funciona bem, mas se enquadra claramente no domínio do “trabalho ocupado”. Aqui está um exemplo:

static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell
= [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

Na grande maioria das situações, o que você realmente precisa de um identificador de reutilização é a exclusividade com base no tipo de classe de uma célula da tabela. Sabendo disso, certamente é possível conjurar um identificador de reutilização automaticamente usando a classe de célula da tabela, em vez de criar uma nova string toda vez que você usa uma célula. Algo mais ou menos assim:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class])];
if (!cell) {
cell
= [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([UITableViewCell class])];
}

Este código, NSStringFromClass ([UITableViewCell class]), converte a propriedade de classe de UITableViewCell em uma string, que fornece uma representação de string prática da classe que é perfeitamente adequada como um identificador de reutilização. Embora funcione muito bem, a ideia pode ser levada um passo adiante com uma categoria em UITableViewCell que lida com a conversão de string de classe nos bastidores. E, como é uma categoria, funcionará para todas as classes derivadas de UITableViewCell. Esta é a aparência do código com a nova categoria:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[UITableViewCell reuseIdentifier]];
if (!cell) {
cell
= [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[UITableViewCell reuseIdentifier]];
}

E aqui estão os arquivos .h e .m para a categoria UITableViewCell + ReuseIdentifier:

UITableViewCell + ReuseIdentifier.h

#import <UIKit/UIKit.h>


@interface UITableViewCell (ReuseIdentifier)

+ (NSString *)reuseIdentifier;

@end

UITableViewCell + ReuseIdentifier.m

#import "UITableViewCell+ReuseIdentifier.h"


@implementation UITableViewCell (ReuseIdentifier)

+ (NSString *)reuseIdentifier {
return NSStringFromClass([self class]);
}

@end

Adicione esses dois arquivos ao seu projeto, importe UITableViewCell + ReuseIdentifier.h para o seu código, e você estará pronto para usar reuseIdentifier para eliminar um pequeno trabalho enfadonho de visualização de tabela!