Quelle est la différence entre deux extraits ?
[myObj release];
et
[myObj release];
myObj = nil;
Quelle est la différence entre deux extraits ?
[myObj release];
et
[myObj release];
myObj = nil;
Si vous libérez un objet, il deviendra un objet libre.
Et si vous essayez d'effectuer toute sorte d'opération sur l'objet libéré, votre application se plante. Pour éviter de tels accidents, il est toujours préférable "d'assigner votre objet à nil après l'avoir libéré". . Car nous savons tous que toute opération effectuée sur nil ne sera pas exécutée :)
C'est un grand problème de gestion de la mémoire. Si vous utilisez une propriété, vous pouvez utiliser nil sans utiliser release. Parce que la méthode setter d'une propriété fonctionne comme suit :
- (void)setObjTypes:(NSArray *)ObjTypes {
[ObjTypes retain];
[_ObjTypes release];
_ObjTypes = ObjTypes;
}
Les setters augmentent le nombre de références de la variable transmise, diminuent le nombre de références de l'ancienne variable d'instance, puis fixent la variable d'instance à la variable transmise. De cette façon, l'objet a correctement un compte de référence pour l'objet stocké dans la variable d'instance tant qu'elle est définie.
La méthode setter applique automatiquement la méthode release et fixe ensuite la valeur de la variable d'instance à nil. Mais si vous n'utilisez pas la propriété, vous devez savoir qu'avant de définir la valeur nil, vous devez d'abord définir la méthode release. Si nous définissons un pointeur sur nil, cela signifie qu'il ne pointe sur aucune adresse mémoire et que si nous essayons d'accéder à cette mémoire en utilisant le pointeur ci-dessus, il y aura un crash. Et si nous appelons la méthode release sur une variable d'instance, cela libère la mémoire.
Il faut faire attention à la première, car après avoir libéré l'objet, le pointeur pointe toujours vers une mémoire endommagée et peut contenir un autre objet. Ainsi, dans le premier cas, si vous essayez [myObj release] puis [myObj doSomething], l'application peut se planter.
Mon conseil est que vous devriez toujours le mettre à zéro après la libération.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.