Eiko et d'autres ont donné des réponses correctes.
Voici un moyen plus simple: accédez Directement la variable membre privée.
Exemple
Dans l'en-tête .h fichier:
@property (strong, nonatomic, readonly) NSString* foo;
Dans la mise en œuvre .m fichier:
// inside one of my init methods
self->_foo = @"someString"; // Notice the underscore prefix of var name.
C'est ça, c'est tout ce dont vous avez besoin. Pas muss, pas de chichi.
Détails
Comme de Xcode 4.4 et Compilateur LLVM 4.0 (Nouvelles Fonctionnalités dans Xcode 4.4), vous avez besoin de ne pas jouer avec les tâches abordées dans les autres réponses:
- L'
synthesize
mot-clé
- La déclaration d'une variable
- Re-déclarer la propriété dans la mise en œuvre .m de fichier.
Après la déclaration d'une propriété foo
, vous pouvez supposer Xcode a ajouté une variable membre privée nommé avec un préfixe de trait de soulignement: _foo
.
Si le bien a été déclaré readwrite
, Xcode, génère une méthode de lecture nommée foo
et un setter nommé setFoo
. Ces méthodes sont implicitement appelée lorsque vous utilisez la notation par points (mon Objet.myMethod). Si le bien a été déclaré readonly
, pas de setter est généré. Cela signifie que la sauvegarde de variable, nommée avec le trait de soulignement, est pas lui-même en lecture seule. L' readonly
signifie simplement qu'aucune méthode de définition a été synthétisé, et, par conséquent, à l'aide de la notation par points pour définir une valeur échoue avec une erreur du compilateur. La notation par points échoue parce que le compilateur ne vous empêche de l'appel d'une méthode (le passeur) qui n'existe pas.
La façon la plus simple de contourner cela est d'accéder directement à une variable membre, nommé par le trait de soulignement. Vous pouvez le faire même sans déclarer qu'trait de soulignement (variable nommée! Xcode est l'insertion de cette déclaration dans le cadre de la construction/processus de compilation, de sorte que votre code compilé aurez en effet la déclaration de la variable. Mais vous ne verrez jamais cette déclaration dans le fichier de code source. Pas de magie, juste de sucre syntaxique.
À l'aide de self->
est un moyen d'accéder à une variable de membre de l'objet ou de l'instance. Vous pouvez être en mesure d'omettre que, et il suffit d'utiliser la var nom. Mais je préfère utiliser les auto+flèche parce qu'il rend mon code auto-documentation. Quand vous voyez l' self->_foo
vous le savez sans ambiguïté que _foo
est une variable de membre sur cette instance.
Par la manière, la discussion des avantages et des inconvénients d'accesseurs de propriété rapport directe ivar accès est exactement le genre de personnes réfléchies traitement que vous allez lire dans le Dr Matt Neuberg's de la Programmation iOS livre. Je l'ai trouvé très utile pour lire et re-lire.