質問するログイン新規登録

回答編集履歴

1

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

2017/11/14 06:42

投稿

TomohiroKumagai
TomohiroKumagai

スコア441

answer CHANGED
@@ -34,7 +34,7 @@
34
34
  }
35
35
  ```
36
36
 
37
- つまり `@property` でプロパティーを宣言すると、それに必要なインスタンス変数、ゲッター、セッターが自動的に実装されます。純粋に `@property` は **プロパティーを簡単に実装するための便利機能** です。
37
+ つまり `@property` でプロパティーを宣言すると、それに必要なインスタンス変数、ゲッター、セッターが自動的に実装されます。純粋に `@property` は **プロパティーを簡単に実装するための便利機能** です。それを使わずに、上のような実装を自分で書いてもプロパティーを実装することができます。
38
38
 
39
39
  ## 名前のつけられ方
40
40
 
@@ -82,6 +82,24 @@
82
82
  @end
83
83
  ```
84
84
 
85
+ ## 任意の名前にも変更可能
86
+
87
+ このように `@property` を使うと、プロパティーを構成する上で必要な、インスタンス変数とセッターとゲッターが、自動的に実装されますけど、その名前を自分で指定することもできます。
88
+
89
+ セッターやゲッターの名前は `@property` の属性で指定できます。たとえば、セッターを `[obj f]` で、ゲッターを `[obj g: value]` で扱いたい場合は、プロパティーを次のように宣言します。
90
+
91
+ ```objective-c
92
+ @property (nonatomic, getter=f, setter=g:) NSString *firstName;
93
+ ```
94
+
95
+ また、インスタンス変数の名前を変更したいときは `@implementation` 〜 `@end` 内で `@synthesize` キーワードを使って、どのプロパティー名の値をどのインスタンス変数に保存したいかを指定します。そうすると、その名前のインスタンス変数が定義されて、ゲッターとセッターはそれを扱うようにコードを生成してくれます。
96
+
97
+ たとえば、プロパティー `firstName` で使うインスタンス変数名を `_k` で用意したいときは、次のように記載します。
98
+
99
+ ```objective-c
100
+ @synthesize firstName = _k;
101
+ ```
102
+
85
103
  # 2. クラス変数とインスタンス変数
86
104
 
87
105
  ## インスタンス変数