2009-04-29 4 views
22

Y at-il de mal à faire quelque chose commeEst-il nécessaire de définir des pointeurs à zéro en Objective-C après la libération?

NSString * string = [ [ NSString alloc ] init ];
...
[ string release ];

ou est-il une valeur (autre que les meilleures pratiques) en ajoutant également

string = nil;

?

+0

La mise à zéro rend NSZombieEnabled inutile, ce qui pourrait être contre-productif. Ce serait mieux si quelqu'un plus compétent que moi m'expliquait cela. – ustun

Répondre

28

Non nécessaire, mais bonne pratique. Si vous deviez le mentionner par inadvertance après sa libération, de mauvaises choses pourraient se produire, mais dans l'Objectif C, il n'y a aucun mal à faire référence à un zéro.

+0

Cool. Je m'en suis rendu compte, mais je voulais m'assurer qu'il n'y avait pas quelque chose de crucial qui me manquait. Merci. – LucasTizma

3

Définition d'une variable d'instance à zéro est plus utile dans une application multi-thread d'un seul thread, car avec plusieurs threads vous ne pouvez pas toujours garantir qu'une variable d'instance ne sera lu que avant sa sortie.

En général, je ne me soucie pas des applications monothread, à moins d'une autre raison impérieuse.

0

Objective-C est vraiment le même que C avec un préprocesseur de fantaisie.

La définition d'un pointeur sur zéro dans Objective-C n'a aucun effet sur ce qui a déjà été pointé par ce pointeur.

Questions connexes