objective-c - OC Il vaut mieux ne pas utiliser de propriétés dans les méthodes d'initialisation ou de dealloc, pourquoi ?
習慣沉默
習慣沉默 2017-05-02 09:29:36
0
3
720

J'ai vu cette description plusieurs fois : il est préférable de ne pas utiliser d'attributs dans la méthode d'initialisation ou le dealloc, car vous ne pouvez pas être sûr que self appelle réellement l'instance souhaitée. Pourquoi ?

習慣沉默
習慣沉默

répondre à tous(3)
漂亮男人

Où l’avez-vous regardé ? Tout cela appartient au passé, il n’y a aucune restriction dans ARC, vous pouvez l’utiliser comme vous le souhaitez.

Dans l'ancien temps de la gestion manuelle de la mémoire, appeler des attributs impliquait d'ajouter ou de soustraire des compteurs de références, et self = [super ...] l'objet initialisé n'est pas nécessairement un objet de la classe actuelle, il peut s'agir d'une "variante" ou d'une classe privée (objc en classe a la différence entre class et metaclass), donc si vous ne savez pas comment ajouter ou soustraire le compteur de référence dans la méthode de définition d'attribut, vous ne pouvez conserver et libérer que pour ivar.

- (id)initWithString:(NSString *)str
{
    self = [super init];
    if (self) {
        _foo = [str copy];
    }
    return self;
}

- (void)dealloc
{
    [_foo release];
    [super dealloc];
}

retain(copy,new) et release apparaissent par paires

给我你的怀抱

Parce que cela générera des références circulaires, comme délégué, qui ne seront jamais publiées

漂亮男人

Parce qu'il existe des catégories (Catégorie), des setters, des getters, des KVO, etc., vous devez y prêter attention
Le plus important est que la grammaire peut appeler les propriétés et les méthodes de classification, mais _. ne fonctionne pas, il faut faire attention

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal