objective c - Propriété vs ivar à l'époque de l'ARC




objective-c properties (2)

Je crois comprendre que la définition d’un ivar conserve à présent l’objet qui lui est attribué, car la définition des variables est définie par défaut sur le qualificatif strong . Étant donné que les ivars sont dans la portée de l'objet pour lequel ils ont été déclarés et que strong retient les objets dans la portée de la variable, cela signifie que la valeur ivars ne sera jamais libérée tant que l'objet contenant l'ivar est toujours actif.

Est-ce correct?

Si tel est le cas, ai-je raison de penser qu'il n'y a plus, en termes de gestion de la mémoire, de différence entre une propriété de type rétention (forte) et un simple ivar?


Si une variable:

  1. Est déclaré dans une classe 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 pas de KVO .
  4. Ne nécessite aucun getter / setter personnalisé.

Ensuite, il convient de le déclarer comme un ivar sans @property / @synthesize correspondant, et de s'y référer directement dans la mise en œuvre. Il est en ligne avec Encapsulation de déclarer cet ivar dans le fichier d'implémentation de la 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 s'il s'agit d'une primitive.

Vous ne pouvez pas utiliser KVO et KVO des getter et des setters personnalisés avec des variables d'instance autres que celles très similaires lors de l'utilisation d'ARC.





ivar