[objective-c]カテゴリー - あとからばんばん機能を追加できる!? 2008/11/09

Objective-Cです。
カテゴリーは、クラスに機能を追加する方法です。


Aというクラスがあったとして、あとからAのソースコードに機能(メソッド)を追加するのではなく、外から定義できます。
これはサブクラス(継承)しなくても機能を追加できるということです。あとたくさんの機能をもっているクラスのソースを分割して記述できるということでもあるようです。

Aというクラスが定義されてあるA.h,A.mがあるとして、カテゴリーは、A+Category.hに定義します。実装は、A+Category.m
に。
クラス名+カテゴリ名.h、クラス名+カテゴリ名.mとするのがルールのようです。
このルールがあるで、ソースコードをみてすぐにどのクラスのなんというカテゴリかがわかるってことになるのかな


A+Category.hは下記の感じ、

#import "A.h"

@interface A (Category)
- (void)methodC;
@end


#import "ClassName.h"
@interface カテゴリーが追加されるのクラス名前 ( カテゴリー名 )
// メソッド宣言
@end


実装、A+Category.m
#import "A+Category.h"
#import <stdio.h>

@implementation A (Category)
- (void)methodC
{
printf("category method A:[%d]!!\n", i++);
}
@end


#import "ClassName+CategoryName.h"
@implementation カテゴリーが追加されるのクラス名前 ( カテゴリー名 )
// メソッド定義
@end


カテゴリーからは拡張したクラスのインスタンス変数がみれます。

機能追加対象のクラスのソースコードがなくても機能追加できます。

: