Skip to content

Key-Value Coding Compliant Container Class


Core Animation Programming Guide を読んでいると、Key-Value Coding Compliant Container Class というものが登場します。この記事では、Key-Value Coding Compliant Container Class の説明とその使い方について説明します。

Key-Value Coding Compliant Container Class は「任意のキーに任意の値を設定することができるクラス」のことを言います。

[obj setValue:someValue forKey:someKey];
someKey に someValue を設定することができます。

[obj valueForKey:someKey];
someKey に設定した値を取得することができます。

例えば、CAAnimation は Key-Value Coding Compliant Container Class です。CAAnimation には、identifier プロパティがないし、setIdentifier: メソッドもないので、普通なら identifier キーに値を設定することはできません。(厳密にはもう少し条件があります。Key-Value Coding Programming Guide を参照)
しかし、CAAnimation は Key-Value Coding Compliant Container Class なので identifier キーに値を設定することができます。

CAAnimation に identifier を割り当てておけば、animationDidStop:finished: が呼ばれたときに、どのアニメーションが停止したのか判別できるので便利です。

- (void)method1
    // ...
    [animation1 setValue:@"Animation1" forKey:@"identifier"];
    [view addAnimation:animation1 forKey:@"Key1"];

- (void)method2
    // ...
    [animation2 setValue:@"Animation2" forKey:@"identifier"];
    [view addAnimation:animation2 forKey:@"Key2"];

- (void)animationDidStop:(CAAnimation *)theAnimation
    NSString *identifier;
    identifier = [theAnimation valueForKey:@"identifier"];
    if ([identifier isEqualToString:@"Animation1"]) {
        // ...
    else if ([identifier isEqualToString:@"Animation2"]) {
        // ...

上の例では、CAAnimation に identifier を設定しました。CAAnimation のサブクラスを作らずに、identifier という拡張を実現できたわけです。このように、Key-Value Coding Compliant Container Class は、高い拡張性を持ったクラスと言えます。

次回は、Key-Value Coding Compliant Container Class の作り方について説明します。


From → Develop

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s