Objectif-C: Faire des ivars @Public ou @Synthesizing @properties pour eux? Quand dois-je utiliser des propriétés?
-
13-11-2019 - |
Question
J'ai des variables d'instance dans ma classe que je voudrais être accessible n'importe où. Ainsi:
@interface SomeObject : NSObject
{
@public
NSString *someString;
}
@end
@implementation SomeObject
@end
Je peux accéder à la propriété à partir de l'instance en utilisant le ->
Syntaxe comme ci-dessous, comme je le ferais en C ++:
someObjectInstance->someString
Devrais-je faire une propriété pour someString
Quand tout ce que je veux, c'est qu'il soit accessible par le monde extérieur? Je créerais un @property
pour someString
dans mon interface et @synthesize
dans mon implémentation, qui me permettrait d'y accéder à l'aide de la syntaxe DOT.
La solution
D'une manière générale, si vous souhaitez exposer des données, vous devez utiliser des propriétés. Rendre les variables d'instance publiques est une mauvaise idée en général.
Autres conseils
C'est la façon plus orientée objet de le faire car lorsque vous utilisez une propriété, vous pouvez modifier le Getter / Setter plus tard (au lieu de l'avoir synthétisé) si vous vouliez qu'il fasse autre chose.
Oui, parce que ce que vous faites lorsque vous en faites un @property
dirige des gens qui l'utilisent pour appeler le setSomeString
et someString
Méthodes, en fait. Même si tu es @synthesize
les ing, il est préférable que la qualité de votre code utilise les méthodes, car vous pourrait Changez-les si vous en avez besoin. Si vous utilisez simplement la référence du pointeur, si vous avez besoin d'intercepter les accès, vous ne pourrez pas.