Objective-C調べたことメモ カテゴリ編
カテゴリの使用
カテゴリを使うと、以下のことが可能になる。
-
- 既存のクラスへのメソッド追加
- クラスのファイル分割
以下の例では、NSStringクラスにSuzuというカテゴリを追加し、Hoge(), lengthAsNumber()メソッドを追加している。メソッドは追加できるけど、新しいインスタンス変数は追加できない。
@interface NSString (Suzu) -(void)Hoge; -(NSNumber*) lengthAsNumber; @end @implementation NSString (Suzu) -(void)Hoge{ NSLog(@"hoge"); } -(NSNumber *) lengthAsNumber{ unsigned int length = [self length]; return([NSNumber numberWithInt:length]); } @end #import <UIKit/UIKit.h> int main(int argc, char *argv[]) { // lengthAsNumber()内のコンビニエンスイニシャライザ // でautoreleaseされるため必要 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *str = @"homuhomu"; [str Hoge]; NSNumber *j = [str lengthAsNumber]; NSLog([j description]); [pool release]; return 0; }
参考にさせて頂きました。
http://lifeaether.homeunix.net/overtaker/blog/?page_id=1554
http://www.f5yo.net/archives/141