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

Objective-C Category 深度解析:類別擴展與私有方法宣告

     編輯:關於C語言

Objective-C Category 深度解析:類別擴展與私有方法宣告

Category(類別)是 Objective-C 強大的動態特性,類似 Swift 的 Extension。主要用途:為現有類別添加方法(含系統類如 NSString、NSArray)與實現私有方法前向宣告。

一、基本類型擴展:為 NSString 添加反轉方法

1. 宣告介面

// NSString+ReverseString.h
@interface NSString (ReverseString)
- (id)reverseString;
@end

2. 實現方法

// 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

3. 使用範例

#import "NSString+ReverseString.h"
NSString *str = @"hello world";
NSString *reversed = [str reverseString]; // "dlrow olleh"

⚠️ 重要限制

  • 無法新增實例變數/屬性:Category 僅能添加方法,不能增加儲存空間(需用子類別或關聯物件 objc_setAssociatedObject)。
  • 方法名衝突:若多個 Category 定義同名方法,行為未定義(通常最後載入者生效)。

二、私有方法前向宣告:解決「方法未宣告」警告

場景:.m 檔中 test1 呼叫 test2,但 test2 定義在後,編譯器發出警告。

傳統做法

在 .h 公開宣告 → 破壞封裝,外部可見。

Category 解法:匿名分類

// Foo.m 內部
@interface Foo (Private) // 匿名分類,外部不可見
- (void)test2;
@end

@implementation Foo
- (void)test1 { [self test2]; } // 無警告
- (void)test2 { ... } // 實現
@end
  • () 中為空即匿名分類,僅作用於本實現檔。
  • 實現私有方法宣告,不汙染公開介面,消除編譯警告。

總結

用途關鍵點
系統類擴展命名慣例 ClassName+Feature,僅加方法
私有方法宣告匿名分類 @interface ClassName () 在 .m 中
協議遵循可在 Category 中宣告遵循協議
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved