BAD_ACCESS

おもにiOS、ときどき変な電子工作、ガジェット話。

KVC(Key-Value Coding)とは何か(1)

「KVC」とは何かをしっかり理解しておきたいのでメモ。
参考書籍は「詳解Objective-C 2.0」詳解 Objective-C 2.0 第3版
(もう第3版が出てる!)

<KVC>

こちらが特に何も加えなくても、オブジェクトのプロパティに対して「キー」と呼ばれる文字列でアクセスする方法が用意されている。それがKVC(Key-Value Coding)。

(例)Person.h

@interface Person : NSObject {
    NSString *name;
    NSString *email;
    int          *age;
}
@end

PersonクラスのオブジェクトaPersonのプロパティ「name」にアクセス。

id name = [aPerson valueForKey:@"name"];

このように、文字列としてプロパティの値を指定することでアクセスできてしまう!
(Personオブジェクトをまるで NSDictionaryクラスのように扱うことができる)

<プロパティ?>

ここでプロパティと呼ぶことに違和感を覚えることがあるかもしれない。
実際に、Personクラスにおいてメンバ変数「name」は宣言プロパティによってプロパティの定義を行なってない。
KVCにおいては宣言プロパティやアクセサメソッドだけでなく、インスタンス変数が定義されているだけでもプロパティとして扱うことができる。(図を参照)

KVCで重要な要素であるKeyPathについては別途勉強メモをつくる。