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

Objective-C 基礎:繼承體系、初始化模式與便利建構器詳解

     編輯:關於C語言

一、Objective-C 繼承機制核心規則

  • 單一繼承:一個類別只能有一個直接父類別,但父類別可有多個子類別。
  • 根類別:所有類別最終繼承自 NSObject(或 NSProxy)。
  • 繼承內容:子類別自動擁有父類別的實例變數(受 @public/@protected 修飾)與公開方法(在 .h 中宣告者)。
  • 方法查找順序:子類別 → 父類別 → 父類別的父類別… 找不到則拋出例外導致 Crash。

二、方法重寫:完全與部分重寫

// 完全重寫:子類別自行實現,不呼叫 super
- (void)customMethod {
    // 子類別專屬邏輯
}

// 部分重寫:擴充父類別行為,透過 super 呼叫父類別實現
- (void)customMethod {
    [super customMethod]; // 先執行父類別邏輯
    // 再執行子類別額外邏輯
}

重寫時不需在 .h 重新宣告;若父類別方法為私有(未在 .h 宣告),子類別同名方法視為新方法而非重寫。

三、初始化方法設計規範

指定初始化器

類別的主要初始化入口,通常命名為 initWith…,責任鏈:

- (instancetype)initWithColor:(NSString *)color price:(NSString *)price {
    if (self = [super init]) { // 必須呼叫 super 指定初始化器
        _color = color;
        _price = price;
    }
    return self;
}
  • 回傳型別建議用 instancetype 而非 id,編譯器可做型別檢查。
  • 自訂初始化器無需在 .h 宣告(屬於實作細節)。
  • 若類別有多個初始化器,應指定一個為「指定初始化器」,其他透過它串聯。

便利建構器

類別方法,封裝 alloc + init,回傳自動釋放(ARC 下為強參考)物件:

+ (instancetype)appleWithColor:(NSString *)color price:(NSString *)price {
    return [[self alloc] initWithColor:color price:price];
}
  • 命名慣例:+ classNameWith… 或 + typeWith…。
  • 內部呼叫 [[self alloc] init…] 而非硬編碼類別名,支援子類別繼承時正確建立子類別實例。
  • ARC 環境下回傳物件擁有權由呼叫端管理,無需 autorelease。

四、物件指標與賦值特性

OC 物件本質是指標,賦值僅複製指標位址:

MyClass *obj1 = [[MyClass alloc] init];
MyClass *obj2 = obj1; // 兩指標指向同一記憶體
[obj1 release]; // 非 ARC 下釋放導致 obj2 成野指標

這也是引用計數機制存在的根本原因(詳見下一篇《Objective-C 記憶體管理》)。

五、最佳實踐總結

  1. 每個類別明確指定一個「指定初始化器」,文件化其契約。
  2. 所有其他初始化器(含便利建構器)最終委派給指定初始化器。
  3. 子類別覆寫指定初始化器時,必須呼叫 [super designatedInitializer]。
  4. 便利建構器回傳 instancetype,內部使用 self 呼叫 alloc。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved