Sont les variables d'instance définie à zéro par défaut en Objective-C?
Je suis tri de certains problèmes de mémoire avec mon iPhone et je viens de penser à quelques notions de base. Si je configurer un ivar et ne jamais l'utiliser dans la durée de vie de mon objet, quand je l'appelle dealloc sur elle, cela cause un problème? E. g.
@interface testClass {
id myobject;
}
@property (nonatomic, retain) id myobject;
@end
@implementation testClass
@synthesize myobject;
- (id)init {
...
//Do I have to set myobject to nil here?
//So if myobject isn't used the dealloc call to nil
//will be okay? Or can you release the variable without
//having set every object to nil that you may may not use
...
}
...
//Somewhere in the code, myobject may be set to
//an instance of an object via self.myobject = [AnObject grabAnObject]
//but the object may be left alone
...
- (void)dealloc {
[myobject release];
[super dealloc];
}
@end
- Mike Abdullah: j'ai fait ce changement dans mon montage.
- Ah bon, donc normale de la variable créée dans une fonction ne sont pas définis à 0/zéro lorsque vous les déclarez ensuite? Juste les variables d'instance. Donc, est-il exact que les variables normales sera juste contiennent des "ordures" jusqu'à ce que vous l'avez explicitement définie à quelque chose?
- Qui est correct.
- objet Local variables sont automatiquement initialisés à zéro.
- ... lorsque vous utilisez un ARC, qui vous doit.
Vous devez vous connecter pour publier un commentaire.
Variables d'Instance sont initialisées à 0 avant votre initialiseur fonctionne..
Oui, ivars sont toujours initialisées à 0/nul/NULLE/NON/etc.
Cependant, si elle vous aide à comprendre ce qu'il se passe, d'aller pour elle. L'impact sur les performances est négligeable. Vous n'avez pas besoin de le faire, mais il ne sera pas causer des problèmes si vous n'.
init
méthodes peuvent souvent être omis complètement, ce qui est une bonne chose. Si les développeurs sont encore en apprentissage, ils ne devraient pas apprendre ce concept de code, mais à partir d'un livre, d'instructeur, de SORTE que, ou que ce soit. Ils n'apprendraient pas ce concept par la lecture de code redondant, de toute façon.Je trouve que c'est une bonne pratique de toujours régler ces ivars à
nil
dans leinit
méthode. De cette façon, vous êtes absolument sûr que votre appel àrelease
dans le destructeur ne peut pas causer des problèmes.Si il s'avère que l'Objective-C n'est automatiquement mis à
nil
, et pour quelque raison que vous vous retrouvez avec un goulot d'étranglement de vitesse qui peut être amélioré par la suppression de ces affectations (très peu probable), alors vous pouvez vous soucier de la suppression d'eux. Dans l'intervalle, les mettre tous ànil
et le sommeil plus facile 🙂mise à jour: BJ Homer et Chuck ont souligné que le ivars sera automatiquement mis à zéro, alors maintenant, c'est une décision sur le style.