OC 是動態語言,除編譯器外仍需運行時系統 執行編譯後代碼。Runtime 相當於 OC 的「作業系統」,負責物件生成、釋放、記憶體管理、消息分發等核心功能。NSObject 作為根類別,封裝了 Runtime 基礎功能,所有繼承它的類別均可使用。
NSObject 唯一實例變數:Class isa,標識實例屬於哪個類別物件。-class 方法。- (Class)class:返回實例所屬類別物件。+ (Class)class:返回類別物件本身。- (BOOL)isMemberOfClass::精確判斷是否為指定類別實例(不含子類)。- (BOOL)isKindOfClass::判斷是否為指定類別或其子類實例。- (Class)superclass / + (Class)superclass:取得父類別物件。+ (id)alloc; // 分配記憶體,retainCount=1
- (void)dealloc; // 釋放實例,retainCount=0 時自動調用
- (id)retain; // retainCount++
- (oneway void)release; // retainCount--
- (id)autorelease; // 延遲釋放,放入自動釋放池
- (NSUInteger)retainCount; // 取得當前計數
- (void)finalize; // 僅 GC 環境有效
ARC 環境下不可手動呼叫以上方法(除 dealloc 釋放資源)。
- (id)init:指定初始化方法,子類必須覆寫並呼叫 [super init]。+ (void)initialize:類別初始化,首次接收訊息前自動調用一次,不可手動呼叫。+ (id)new:alloc + init 組合。- (BOOL)isEqual::語義相等判斷,需配合 hash 覆寫。- (NSUInteger)hash:雜湊值,用於集合快速查找。相等物件必須有相同 hash,但 hash 相等不保證物件相等。+ (NSString *)description:類別描述(通常為類別名)。- (NSString *)description:實例描述(預設類別名 + 位址),常覆寫以便除錯。SEL 型別。@selector(methodName) 取得編譯後的 SEL,可儲存、傳遞、動態呼叫。