J'avais compris qu'une fois que vous avez libéré un objet, vous ne devriez pas l'utiliser car cela entraînerait une erreur puisqu'il n'est plus en mémoire.Libérer un objet mais pouvoir l'utiliser
Mais en lisant this Apple guide, j'ai trouvé ce code, et l'ai déjà vu auparavant, mais je voudrais juste déplacer le [object release]
à la fin de mon code, afin d'éviter d'obtenir une erreur. Mais il semble que cela soit accepté et fonctionne. Alors, pourquoi ça marche? Comment peut-il garder les variables à dateAttribute
après sa sortie?
(ligne 3 est celui en question):
NSMutableArray *runProperties = [NSMutableArray array];
NSAttributeDescription *dateAttribute = [[NSAttributeDescription alloc] init];
[runProperties addObject:dateAttribute];
[dateAttribute release];
[dateAttribute setName:@"date"];
[dateAttribute setAttributeType:NSDateAttributeType];
[dateAttribute setOptional:NO];
Il a obtenu d'ici: Creating a managed object model in code
Modifié pour supprimer la référence à 'retainCount'. Le concept de drop to 0 est valide, mais 'retainCount' ne peut jamais retourner 0 pour des raisons évidentes. – bbum
Le compilateur change-t-il 'dateAttribute' en adresse mémoire? Parce que pour moi, même si le tableau crée un autre 'retain' sur l'objet, c'est toujours deux pointeurs différents (un appelé dateAttribute, un autre appelé runProperties [0]). Donc, si je libère 'dateAttribute', je pense que je libère le pointeur vers cet objet, et la seule façon d'utiliser l'objet serait' [[runProperties objectAtIndex: 0] setSomething: blah]; ' – elcool
Non, la dateAttribute pointera vers la même adresse après la libération, et peu importe que la libération entraîne une désallocation ou non. – tia