A pergunta é simples: como você carrega UITableViewCell
arquivos personalizados do Xib? Isso permite que você use o Interface Builder para projetar suas células. A resposta aparentemente não é simples devido a problemas de gerenciamento de memória. Este tópico menciona o problema e sugere uma solução, mas é anterior ao lançamento do NDA e não possui código. Aqui está um longo tópico que discute o problema sem fornecer uma resposta definitiva.
Aqui está um código que eu usei:
static NSString *CellIdentifier = @"MyCellIdentifier";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyCell *)[nib objectAtIndex:0];
}
Para usar esse código, crie MyCell.m / .h, uma nova subclasse de UITableViewCell
e adicione IBOutlets
os componentes desejados. Em seguida, crie um novo arquivo "Empty XIB". Abra o arquivo Xib no IB, adicione um UITableViewCell
objeto, defina seu identificador como "MyCellIdentifier" e defina sua classe como MyCell e adicione seus componentes. Por fim, conecte-o IBOutlets
aos componentes. Observe que não definimos o proprietário do arquivo no IB.
Outros métodos defendem a configuração do Proprietário do arquivo e avisam sobre vazamentos de memória se o Xib não for carregado por meio de uma classe de fábrica adicional. Testei o acima em Instrumentos / Vazamentos e não vi vazamentos de memória.
Então, qual é a maneira canônica de carregar células do Xibs? Nós definimos o proprietário do arquivo? Nós precisamos de uma fábrica? Em caso afirmativo, como é o código da fábrica? Se houver várias soluções, vamos esclarecer os prós e contras de cada uma delas ...