Category(類別)是 Objective-C 強大的動態特性,類似 Swift 的 Extension。主要用途:為現有類別添加方法(含系統類如 NSString、NSArray)與實現私有方法前向宣告。
// NSString+ReverseString.h
@interface NSString (ReverseString)
- (id)reverseString;
@end
// NSString+ReverseString.m
@implementation NSString (ReverseString)
- (id)reverseString {
NSUInteger len = [self length];
NSMutableString *reversed = [NSMutableString stringWithCapacity:len];
while (len) {
unichar c = [self characterAtIndex:--len];
[reversed appendFormat:@"%C", c];
}
return reversed;
}
@end
#import "NSString+ReverseString.h"
NSString *str = @"hello world";
NSString *reversed = [str reverseString]; // "dlrow olleh"
objc_setAssociatedObject)。場景:.m 檔中 test1 呼叫 test2,但 test2 定義在後,編譯器發出警告。
在 .h 公開宣告 → 破壞封裝,外部可見。
// Foo.m 內部
@interface Foo (Private) // 匿名分類,外部不可見
- (void)test2;
@end
@implementation Foo
- (void)test1 { [self test2]; } // 無警告
- (void)test2 { ... } // 實現
@end
() 中為空即匿名分類,僅作用於本實現檔。| 用途 | 關鍵點 |
|---|---|
| 系統類擴展 | 命名慣例 ClassName+Feature,僅加方法 |
| 私有方法宣告 | 匿名分類 @interface ClassName () 在 .m 中 |
| 協議遵循 | 可在 Category 中宣告遵循協議 |