u16suzuの blog

日々学んだことのメモブログです。

Objective-C調べたことメモ カテゴリ編

カテゴリの使用

カテゴリを使うと、以下のことが可能になる。

    1. 既存のクラスへのメソッド追加
    2. クラスのファイル分割


以下の例では、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