Je suis un peu perdu avec la gestion de la mémoire. J'ai lu que vous devriez libérer chaque fois que vous allouez. Mais quand vous obtenez une instance sans alloc, vous ne devriez pas libérer.Gestion de la mémoire IPhone
Qu'en est-il de cette situation, juste besoin de savoir Si je codais correctement. Je suis encore nouveau sur iphone dev.
J'ai une classe CustomerRepository il a une méthode
- (MSMutableArray *) GetAllCustomers() {
MSMutableArray *customers = [[MSMutableArray alloc] init];
Customer *cust1 = [[Customer alloc] init];
cust1.name = @"John";
Customer *cust2 = [[Customer alloc] init];
cust2.name = @"Tony";
[customers addOjbect:cust1];
[customers addOjbect:cust2];
[cust1 release];
[cust2 release];
return customers;
}
J'ai un UIViewController
- (void) LoadCustomers() {
CustomerRepository *repo = [[CustomerRepository alloc] init];
MSMutableArray *customers = [repo GetAllCustomers];
// Iterate through all customers and do something
[repo release];
}
Donc, dans ce scénario ... le MSMutableArray ne sera jamais sortie? Où devrait-il être publié?
J'ai lu quelque part que autorelease n'est pas trop bon pour être utilisé sur iphone. mais dans mon scénario, je n'ai vraiment pas d'autre choix que d'autorelease (c'est le ramassage des ordures correct)? Est-il préférable de renvoyer une autorelease dans ma méthode GetAllCustomers? Ou juste pour que le repo crée le tableau mais que la méthode LoadCustomer libère quand il en a fini? – pdiddy
Ce que vous avez lu à propos de autorelease n'est certainement pas juste. Parcourez le guide de gestion de la mémoire d'Apple. Cela peut prendre un ou deux jours à lire, mais cela vous sauvera de beaucoup de désastre. Dans ce cas, autorelease dans la méthode GetAllCustomers, car le nom de la méthode n'implique pas que l'appelant sera propriétaire de l'objet retourné. – taskinoor