CocoaにはCocoaBindingsとKVO(キー値監視)という機構があって、あるオブジェクトの値を変えると、それを自動追尾(笑)して、別なオブジェクトの状態が変わってくれるという仕組みがあります。
なら、自分の書いたコードでフラグが変わったり、アレイの中身を変えたら同時にGUIに反映されてくれるとか。
それだけではないのですが、そんな仕組みの一部をになってくれるのが、プロパティ(@property)です。
記述の際、少しキモチワルイのは、@propertyディレクティブは@interfaceディレクティブに続く{}の外に書くので、あれ?メンバー変数じゃないの?っていう気分になってしまいますが、メンバー変数とプロパティは似て異なる物と自分を納得させる事にしておきましょう。
具体的な使い方は、@interfaceディレクティブの中で、{}でメンバー変数を定義した後に
@property (属性名[,属性名]) 型名 変数名
と、いう風に定義します。
では、属性にはどんな属性があるのかというと
メモリー管理系(相互排他なので、どれか一つしか指定出来ない) | |
assign | 単純代入による置き換え、以前のオブジェクトの明示的なリリースは行われない(っぽい) |
retain | 以前のオブジェクトの明示的なリリース後、代入し、retain |
copy | 以前のオブジェクトのリリース後、copyを代入 |
アクセッサ系 | |
getter=method | 参照にmethodを呼び出す |
setter=method | 代入にmethodを呼び出す |
パーミッション系 | |
readonly | 参照のみであることを宣言、宣言しないとreadwrite |
reawrite | プロパティは読み書き可能 |
パフォーマンス系 | |
nonatomic | スレッドセーフを保証しない代わり、パフォーマンスが向上する可能性がある |
このようになっています。
そして、プロパティっていう位ですから内部だけでなく、他のクラスやこのクラスのオブジェクトを生成したクラスからこの値にもアクセスしたいですよね。
そのためにアクセッサーメソッドを生成してくれるのが、@implementationディレクティブの中で記述する。