@synthesizeとは

公開日時 作成者 0gravity000コメントする

 

@synthesizeで、オブジェクトのプロパティのインスタンス変数の名前を変更できます。

検証してみました。

 

確認環境:Xcode 7.2

 

こんな感じで「TESTClass001」クラスを作成します。

「someProperty」というプロパティと「someMethod」というメソッドを作成します。

 

TESTClass001.h

「someMethod」にこんな感じでコードを実装します。

「someProperty」に「Hello」という文字列を設定し、ログ出力させます。

 

TESTClass001.m

「ViewController.m」の「viewDidLoad」で、

「TESTClass001」クラスのインスタンス「testClass」を作成し、

「someMethod」を呼び出します。

 

ViewController.m

14行目で、ブレイクポイントで止めて、デバッグエリアで変数の値を確認します。

「testClass」クラスインスタンスの「_someProperty」の値が「Hello」となっていることを確認します。

この「_someProperty」が「someProperty」プロパティのインスタンス変数です。


Tip_01_01_005a

 

インスタンス変数とは、オブジェクトが「生きて」いる間、その値を保持するための変数です。

インスタンス変数用のメモリ領域は、オブジェクトの生成時に(allocで)確保され、消滅時に解放されます。

特に指定しなければ、このインスタンス変数の名前は、プロパティ名の先頭にアンダースコアがついたものになります。

なので、「_someProperty」がインスタンス変数名となります。

 

今度は、「@synthesize」を宣言して、インスタンス変数名を変えてみます。

「TESTClass001.h」にこんな感じで、「@synthesize」を宣言します。

 

TESTClass001.h


ブレイクポイントで止めて、デバッグエリアで変数の値を確認します。

「@synthesize」で宣言した、インスタンス変数「otherProperty」に変わっていることが確認できました。


Tip_01_01_005b

 

ここで注意する点としては、

プロパティの値を保持するインスタンス変数だけが「otherProperty」になる。ということです。

プロパティ名は「someProperty」のままであること。

アクセサメソッドも「someProperty」や「setSomeProperty」のままであること。

ドット構文でのアクセスも「someProperty」のままであること。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です