頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


そういうことか!クラスのカテゴリ

Objective-Cでクラスをカテゴライズするって技(?)があるんですよね。
クラスのカテゴライズ コードをもっとオブジェクティブに - @IT
↑ここで見たことがあったのですが、さらっと流していました。
正直、使わないかな、、、ということで。

ところが、今勉強中の記事で出てきたのでこれは放っとくわけにはいかないってことになりました。
Study CoreData 8 ~No Music, No Life~ « Everything was born from Love

この記事の中盤あたりか、「4. どんな値も文字列に変えてしまう魔法のメソッド」というところでカテゴリの話が出てきます。
よくわからなかったのが、その記述。
上に二つのリンクがありますが、同じカテゴリなのになにやら違う、、、

最初の方はChefってクラスがあって、カテゴリを利用するのに
@implementation Chef(Japanese)
-(void) makeJapaneseFood {
    NSLog(@"japanese food!");
}
@end

@implementation Chef(Chinese)
-(void) makeChineseFood {
    NSLog(@"chinese food!");
}
@end
といった具合に実装している。

ところが、後の方では次のように実装している。
@implementation NSString(convertValue)
- (NSString *)valueToString {
    return self;
}
@end

@implementation NSDate(convertValue)
- (NSString *)valueToString {
    return [NSDateFormatter
            localizedStringFromDate:self
            dateStyle:NSDateFormatterMediumStyle
            timeStyle:NSDateFormatterNoStyle];
}
@end
ありゃ?
カテゴリってカッコの中を変えることで実装するんじゃないの?
って混乱してしまったわけですが、、、

ここで二つ目のコードをよく見れば、NSStringやNSDateクラスにメソッドを追加しているのですね。
でも、通常は継承しないと自分でメソッドの追加ってできないから、それをせずに実現しているわけだ。
なるほど、これがカテゴリってやつか。
そういう意味では一つ目のコードも同じですよね。
Chefクラスを継承せずに独自のメソッドを追加している。

そういうことかい!
実際にいろいろ自分でテストしてようやく気付きましたわ。
カテゴリ、これは使えそう!是非覚えておかねば!
スポンサーサイト

<< 重すぎるiPad  TopPage  iOS4.0.1とiOS SDK 4.0.1アップデートした(つもり) >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/418-f440a324




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad