recherche

Maison  >  Questions et réponses  >  le corps du texte

objective-c - OC Il vaut mieux ne pas utiliser de propriétés dans les méthodes d'initialisation ou de dealloc, pourquoi ?

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 ?

習慣沉默習慣沉默2843 Il y a quelques jours728

répondre à tous(3)je répondrai

  • 漂亮男人

    漂亮男人2017-05-02 09:31:36

    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

    répondre
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:31:36

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

    répondre
    0
  • 漂亮男人

    漂亮男人2017-05-02 09:31:36

    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

    répondre
    0
  • Annulerrépondre