回答編集履歴

1

@property で自動生成されるインスタンス変数、ゲッター、セッターの名前を自由に指定できる方法を追記しました。

2017/11/14 06:42

投稿

TomohiroKumagai
TomohiroKumagai

スコア441

test CHANGED
@@ -70,7 +70,7 @@
70
70
 
71
71
 
72
72
 
73
- つまり `@property` でプロパティーを宣言すると、それに必要なインスタンス変数、ゲッター、セッターが自動的に実装されます。純粋に `@property` は **プロパティーを簡単に実装するための便利機能** です。
73
+ つまり `@property` でプロパティーを宣言すると、それに必要なインスタンス変数、ゲッター、セッターが自動的に実装されます。純粋に `@property` は **プロパティーを簡単に実装するための便利機能** です。それを使わずに、上のような実装を自分で書いてもプロパティーを実装することができます。
74
74
 
75
75
 
76
76
 
@@ -166,6 +166,42 @@
166
166
 
167
167
 
168
168
 
169
+ ## 任意の名前にも変更可能
170
+
171
+
172
+
173
+ このように `@property` を使うと、プロパティーを構成する上で必要な、インスタンス変数とセッターとゲッターが、自動的に実装されますけど、その名前を自分で指定することもできます。
174
+
175
+
176
+
177
+ セッターやゲッターの名前は `@property` の属性で指定できます。たとえば、セッターを `[obj f]` で、ゲッターを `[obj g: value]` で扱いたい場合は、プロパティーを次のように宣言します。
178
+
179
+
180
+
181
+ ```objective-c
182
+
183
+ @property (nonatomic, getter=f, setter=g:) NSString *firstName;
184
+
185
+ ```
186
+
187
+
188
+
189
+ また、インスタンス変数の名前を変更したいときは `@implementation` 〜 `@end` 内で `@synthesize` キーワードを使って、どのプロパティー名の値をどのインスタンス変数に保存したいかを指定します。そうすると、その名前のインスタンス変数が定義されて、ゲッターとセッターはそれを扱うようにコードを生成してくれます。
190
+
191
+
192
+
193
+ たとえば、プロパティー `firstName` で使うインスタンス変数名を `_k` で用意したいときは、次のように記載します。
194
+
195
+
196
+
197
+ ```objective-c
198
+
199
+ @synthesize firstName = _k;
200
+
201
+ ```
202
+
203
+
204
+
169
205
  # 2. クラス変数とインスタンス変数
170
206
 
171
207