La question est simple: comment charger des UITableViewCell
fichiers personnalisés à partir de fichiers Xib? Cela vous permet d'utiliser Interface Builder pour concevoir vos cellules. La réponse n'est apparemment pas simple en raison de problèmes de gestion de la mémoire. Ce fil mentionne le problème et suggère une solution, mais est pré-version NDA et manque de code. Voici un long fil conducteur qui discute du problème sans fournir de réponse définitive.
Voici un code que j'ai utilisé:
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];
}
Pour utiliser ce code, créez MyCell.m / .h, une nouvelle sous-classe de UITableViewCell
et ajoutez IBOutlets
pour les composants souhaités. Créez ensuite un nouveau fichier "Empty XIB". Ouvrez le fichier Xib dans IB, ajoutez un UITableViewCell
objet, définissez son identifiant sur "MyCellIdentifier" et définissez sa classe sur MyCell et ajoutez vos composants. Enfin, connectez le IBOutlets
aux composants. Notez que nous n'avons pas défini le propriétaire du fichier dans IB.
D'autres méthodes préconisent de définir le propriétaire du fichier et avertissent des fuites de mémoire si le Xib n'est pas chargé via une classe d'usine supplémentaire. J'ai testé ce qui précède sous Instruments / Leaks et je n'ai vu aucune fuite de mémoire.
Alors, quelle est la manière canonique de charger des cellules à partir de Xibs? Définissons-nous le propriétaire du fichier? Avons-nous besoin d'une usine? Si oui, à quoi ressemble le code de l'usine? S'il existe plusieurs solutions, clarifions les avantages et les inconvénients de chacune d'entre elles ...