Question

Je crois comprendre que la définition d'un IVAR conserve désormais l'objet qui lui est attribué, car la définition des variables par défaut strong qualificatif. Parce que les ivars sont dans le cadre de l'objet dans lequel ils sont déclarés et strong Conserve des objets dans le cadre de la variable, cela signifie que la valeur IVARS ne sera jamais libérée tandis que l'objet contenant l'ivar est toujours en vie.

Est-ce correct?

Dans l'affirmative, ai-je raison de penser qu'il y a, en termes de gestion de la mémoire, aucune différence entre une propriété de retenue (forte) et un simple ivar?

Était-ce utile?

La solution

Si une variable:

  1. Est déclaré dans une classe en utilisant ARC.
  2. Est utilisé uniquement pour l'implémentation de classe (non exposé dans le cadre de l'interface de classe).
  3. Ne nécessite aucun Kvo.
  4. Ne nécessite aucun getter / setter personnalisé.

Alors il est approprié de le déclarer comme un ivar sans un @property/@synthesize, et pour y faire référence directement dans la mise en œuvre. Il est en ligne avec Encapsulation pour déclarer cet ivar dans le fichier d'implémentation de classe.

// MyClass.h
@interface MyClass : ParentClass
@end

// MyClass.m
@implementation MyClass {
    NSString *myString;
}

- (void)myMethod {
    myString = @"I'm setting my ivar directly";
}
@end
  • Cet ivar sera traité comme __strong par le compilateur ARC.
  • Il sera initialisé à nil S'il s'agit d'un objet, ou 0 Si c'est une primitive.

Autres conseils

Vous ne pouvez pas utiliser Kvo Et faites-les personnalisés et des setters avec des variables d'instance autres que celles qui sont très similaires lors de l'utilisation de l'arc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top