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

Objective-C 基礎:繼承機制、初始化方法與便利建構器完整指南

     編輯:C 語言入門

繼承核心規則

  • 單一繼承:一個類別僅能有一個直接父類別,但父類別可有多個子類別
  • 根類別:所有類別最終繼承自 NSObject(非 OSObject,筆誤已修正)
  • 繼承範圍:子類別自動擁有父類別的 @public、@protected 實例變數與所有公開方法

方法重寫機制

類型說明關鍵字
完全重寫子類別提供全新實作,不呼叫父類別直接實作同名方法
部分重寫擴充父類別行為,保留父類別邏輯[super methodName]

方法查找流程

  1. 先在類別自身方法列表搜尋
  2. 未找到則往父類別遞迴搜尋
  3. 直到 NSObject 仍未找到 → 拋出 unrecognized selector 異常導致 Crash

存取控制與物件本質

  • .h 宣告的方法 = 公開方法;未宣告 = 私有方法(但 Objective-C 無絕對私有,可透過 performSelector: 呼叫)
  • 物件本質 = 指標,指標賦值僅複製參考,非深拷貝

初始化方法設計模式

指定初始化器

- (instancetype)initWithColor:(NSString *)color price:(NSString *)price {
    self = [super init]; // 必須呼叫父類別指定初始化器
    if (self) {
        _color = color;
        _price = price;
    }
    return self;
}

關鍵點:

  • 回傳型別用 instancetype 優於 id(型別檢查更嚴格)
  • self = [super init] 確保父類別初始化完成
  • 不需在 .h 宣告(屬於實作細節)

便利建構器

+ (instancetype)appleWithColor:(NSString *)color price:(NSString *)price {
    return [[self alloc] initWithColor:color price:price];
}

三大特徵:

  1. 類別方法(+ 開頭)
  2. 內部呼叫 alloc + 指定初始化器
  3. 回傳自動釋放物件(ARC 下相同,MRC 需 autorelease)

兩者比較總結

維度指定初始化器便利建構器
方法性質實例方法 (-)類別方法 (+)
職責初始化 + 賦值配置記憶體 + 初始化 + 賦值
呼叫鏈必須呼叫 [super init...]必須呼叫 [self init...] (同類別指定初始化器)
典型命名initWith...classNameWith... 或 + ...

最佳實踐建議

  1. 每個類別指定 一個主要指定初始化器,其他初始化器內部呼叫它
  2. 便利建構器務必呼叫本類別指定初始化器,絕不直接呼叫 [super init]
  3. 子類別若新增實例變數,必須覆寫父類別指定初始化器 並初始化新變數
  4. ARC 環境下便利建構器直接 return [[self alloc] init...] 即可,無需手動管理記憶體

結語

繼承與初始化是 Objective-C 物件模型的基石。掌握指定初始化器與便利建構器的分工協作、遵循 super 呼叫鏈規範、善用 instancetype 提升型別安全,能讓你建構出穩健、可擴充的類別體系。

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