Je suis curieux de savoir si le code que j'utilise ici est un bon moyen de le faire. Fondamentalement, je suis en train de créer un objet modèle simple (au sens MVC) en l'instanciant depuis mon ViewController. L'idée étant que la première fois que j'appelle [[self dataModel] doSomething];
il crée un nouvel objet (ou réutilise un existant). J'ai été spécifiquement concerné par la mise en place de la propriété et la publication correcte de l'alloc local, tous les commentaires seraient très appréciés.Modèle de répartition/retenue (mvc)?
// INTERFACE
DataModel *dataModel;
@property(nonatomic, retain) DataModel *dataModel;
// IMPLEMENTATION
@synthesize dataModel;
// Lazy Instanciation ...
- (DataModel *)model {
if(!dataModel) {
DataModel *tempDataModel = [[DataModel alloc] init];
[self setDataModel:tempDataModel;
[tempDataModel release];
}
return dataModel;
}
// Clean up
- (void)dealloc {
[dataModel release];
[super dealloc];
}
OU: (bien que je ne aime pas vraiment cela comme il semble déroutant pour moi)
// Lazy Instanciation ...
- (DataModel *)model {
if(!dataModel) {
[self setDataModel:[[DataModel alloc] init]];
[dataModel release];
}
return dataModel;
}
gary.
Salut, si possible, j'ai essayé (en règle générale) pour éviter d'utiliser autorelease. Mais je peux voir votre point de vue, il rend la méthode beaucoup plus simple, plus il n'y en aura jamais qu'un seul, donc les frais généraux sont minimes de toute façon. Très appréciée. – fuzzygoat
'release' est" meilleur "que' autorelease' car il est plus probable qu'il libère la mémoire plus tôt. Mais dans mon expérience, 'autorelease' conduit à moins de bugs _far_ et empêche beaucoup de super difficile de déboguer la douleur associée à des problèmes de gestion de la mémoire.C'est parce que vous pouvez équilibrer l'init et la version droite au même endroit et il est très facile de dire si elle n'est pas équilibrée. Et tant que vos objets ne sont pas un énorme paquet de données, 'autorelease' ne causera pas beaucoup de frais généraux. –