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

Objective-C 語法學習 Day 4:NSObject、Runtime 與記憶體管理核心

     編輯:關於C語言

Objective-C 語法學習 Day 4:NSObject、Runtime 與記憶體管理核心

OC 是動態語言,除編譯器外仍需運行時系統 執行編譯後代碼。Runtime 相當於 OC 的「作業系統」,負責物件生成、釋放、記憶體管理、消息分發等核心功能。NSObject 作為根類別,封裝了 Runtime 基礎功能,所有繼承它的類別均可使用。

1. 類別與實例:isa 指標與類別層級

  • NSObject 唯一實例變數:Class isa,標識實例屬於哪個類別物件。
  • 子類不可修改 isa,亦不可直接讀取查詢類別,需呼叫 -class 方法。
  • 關鍵方法:
    • - (Class)class:返回實例所屬類別物件。
    • + (Class)class:返回類別物件本身。
    • - (BOOL)isMemberOfClass::精確判斷是否為指定類別實例(不含子類)。
    • - (BOOL)isKindOfClass::判斷是否為指定類別或其子類實例。
    • - (Class)superclass / + (Class)superclass:取得父類別物件。

2. 實例物件生成與釋放(MRC 手動參考計數)

+ (id)alloc;          // 分配記憶體,retainCount=1
- (void)dealloc;      // 釋放實例,retainCount=0 時自動調用
- (id)retain;         // retainCount++
- (oneway void)release; // retainCount--
- (id)autorelease;    // 延遲釋放,放入自動釋放池
- (NSUInteger)retainCount; // 取得當前計數
- (void)finalize;     // 僅 GC 環境有效

ARC 環境下不可手動呼叫以上方法(除 dealloc 釋放資源)。

3. 初始化

  • - (id)init:指定初始化方法,子類必須覆寫並呼叫 [super init]。
  • + (void)initialize:類別初始化,首次接收訊息前自動調用一次,不可手動呼叫。
  • + (id)new:alloc + init 組合。

4. 物件比較與雜湊

  • - (BOOL)isEqual::語義相等判斷,需配合 hash 覆寫。
  • - (NSUInteger)hash:雜湊值,用於集合快速查找。相等物件必須有相同 hash,但 hash 相等不保證物件相等。

5. 物件描述

  • + (NSString *)description:類別描述(通常為類別名)。
  • - (NSString *)description:實例描述(預設類別名 + 位址),常覆寫以便除錯。

6. 消息發送機制:SEL 與 @selector

  • 方法名(Selector)編譯後轉為內部標識符 SEL 型別。
  • @selector(methodName) 取得編譯後的 SEL,可儲存、傳遞、動態呼叫。
  • 相同 Selector 對應相同 SEL 值,不同 Selector 值不同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved