首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C Category 分類機制詳解:編譯期擴展類方法的最佳實踐

     編輯:關於C語言

Category 核心價值

  • 編譯期機制,**無需訪問原類源碼**即可添加方法
  • 類似 JavaScript 原型擴展
  • 限制:不能添加實例變量(ivars)

實戰:為 NSString 添加駝峰命名轉換

步驟 1:聲明分類(.h)

@interface NSString (CamelCase)
- (NSString *)camelCaseString;
@end

命名慣例:ClassName+CategoryName.h

步驟 2:實現分類(.m)

@implementation NSString (CamelCase)
- (NSString *)camelCaseString {
    // 1. 首字母大寫
    NSString *castr = [self capitalizedString];
    // 2. 按空白字符分割
    NSArray *array = [castr componentsSeparatedByCharactersInSet:
                      [NSCharacterSet whitespaceCharacterSet]];
    // 3. 拼接
    NSString *output = @"";
    for (NSString *word in array) {
        output = [output stringByAppendingString:word];
    }
    return output;
}
@end

步驟 3:使用

int main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSString *str = @"My name is bill.";
    NSLog(@"%@", str);           // My name is bill.
    str = [str camelCaseString];
    NSLog(@"%@", str);           // MyNameIsBill.
    [pool drain];
    return 0;
}

核心要點總結

  1. 分類方法可訪問 self(原類實例)
  2. 無法添加屬性/實例變量,需用關聯對象(Associated Objects)繞過
  3. 同名方法:分類優先於原類,**慎用覆蓋系統方法**
  4. 多個分類同名方法:編譯順序決定勝負,行為未定義
  5. 协议声明:可在分類中聲明遵循協議

來源:驿落黃昏博客

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved