Eiko et d'autres ont donné des réponses correctes.
Voici un moyen plus simple: accédez directement à la variable de membre privé.
Exemple
Dans le fichier .h d'en-tête:
@property (strong, nonatomic, readonly) NSString* foo;
Dans le fichier .m d'implémentation:
// inside one of my init methods
self->_foo = @"someString"; // Notice the underscore prefix of var name.
Voilà, c'est tout ce dont vous avez besoin. Pas de chichi, pas de chichi.
Détails
À partir de Xcode 4.4 et LLVM Compiler 4.0 ( nouvelles fonctionnalités de Xcode 4.4 ), vous n'avez pas besoin de jouer avec les tâches abordées dans les autres réponses:
- Le
synthesize
mot clé
- Déclaration d'une variable
- Re-déclarer la propriété dans le fichier .m d'implémentation.
Après avoir déclaré une propriété foo
, vous pouvez supposer Xcode a ajouté une variable de membre privé nommé par un préfixe de underscore: _foo
.
Si la propriété a été déclarée readwrite
, Xcode génère une méthode getter nommée foo
et un setter nommé setFoo
. Ces méthodes sont appelées implicitement lorsque vous utilisez la notation par points (mon Object.myMethod). Si la propriété a été déclarée readonly
, aucun setter n'est généré. Cela signifie que la variable de sauvegarde, nommée avec le trait de soulignement, n'est pas elle-même en lecture seule. Les readonly
moyens simplement qu'aucun mutateur a été synthétisé, et donc en utilisant la notation de points pour définir une valeur échoue avec une erreur du compilateur. La notation par points échoue car le compilateur vous empêche d'appeler une méthode (le setter) qui n'existe pas.
Le moyen le plus simple consiste à accéder directement à la variable membre, nommée avec le trait de soulignement. Vous pouvez le faire même sans déclarer cette variable nommée par soulignement! Xcode insère cette déclaration dans le cadre du processus de construction / compilation, donc votre code compilé aura effectivement la déclaration de variable. Mais vous ne voyez jamais cette déclaration dans votre fichier de code source d'origine. Pas de magie, juste du sucre syntaxique .
L'utilisation self->
est un moyen d'accéder à une variable membre de l'objet / de l'instance. Vous pourrez peut-être omettre cela et utiliser simplement le nom var. Mais je préfère utiliser la flèche auto + car cela rend mon code auto-documenté. Lorsque vous voyez le, self->_foo
vous savez sans ambiguïté qu'il _foo
s'agit d'une variable membre sur cette instance.
Soit dit en passant, la discussion des avantages et des inconvénients des accesseurs de propriété par rapport à l' accès Ivar directe est exactement le genre de traitement réfléchi que vous allez lire dans le Dr Matt Neuberg de programmation iOS livre. J'ai trouvé très utile de lire et de relire.