Objective-Cカテゴリ(category)と拡張(Extension)
1951 ワード
1、カテゴリ(category)
Object-Cの分類を使用すると、クラスにメソッドを追加することで拡張できます(ただしcategoryでは新しいインスタンス変数を追加できません)、クラスのコードにアクセスする必要がなく、javascriptでプロトタイプを使用して属性を定義するのと少し似ています.
コードでクラス定義を編集することなく、クラスに新しいメソッドを作成できます.
以下に分類を定義して使用する例プログラムを示します.次のコードでは、Object-CのNSStringにcamelCaseString分類を追加し、camelCaseStringメソッドを使用すると、文字列のスペースを削除し、元のスペースの単語を大文字に書き換えることができます(文字列をアルパカ式に変換します).
2、拡張(Extension)
拡張は匿名分類であり、以下に拡張の例を示します.
Object-Cの分類を使用すると、クラスにメソッドを追加することで拡張できます(ただしcategoryでは新しいインスタンス変数を追加できません)、クラスのコードにアクセスする必要がなく、javascriptでプロトタイプを使用して属性を定義するのと少し似ています.
コードでクラス定義を編集することなく、クラスに新しいメソッドを作成できます.
以下に分類を定義して使用する例プログラムを示します.次のコードでは、Object-CのNSStringにcamelCaseString分類を追加し、camelCaseStringメソッドを使用すると、文字列のスペースを削除し、元のスペースの単語を大文字に書き換えることができます(文字列をアルパカ式に変換します).
#import <Foundation/Foundation.h>
/*
:
、 ,
、 ,
*/
//NSString , 。
//CamelCase 。
// , 。
// :ClassName+CategoryName.h
@interface NSString (CamelCase)
-(NSString*) camelCaseString;
@end
@implementation NSString (CamelCase)
-(NSString*) camelCaseString
{
// NSString 。
//self 。
NSString *castr = [self capitalizedString];
// , 。
NSArray *array = [castr componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
//
NSString *output = @"";
for(NSString *word in array)
{
output = [output stringByAppendingString:word];
}
return output;
}
@end
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *str = @"My name is bill.";
NSLog(@"%@", str);
str = [str camelCaseString];
NSLog(@"%@", str);
[pool drain];
return 0;
}
2、拡張(Extension)
拡張は匿名分類であり、以下に拡張の例を示します.
@interface MyClass : NSObject
- (float)value;
@end
@interface MyClass () { // :
float value;
}
- (void)setValue:(float)newValue;
@end
@implementation MyClass
- (float)value {
return value;
}
- (void)setValue:(float)newValue {
value = newValue;
}
@end