Objective-C(OC)是 C 的超集,加入 Smalltalk 風格訊息傳遞,以動態 Runtime 著稱。本文從語言本質、記憶體管理、繼承與協議、C++ 互操作四個維度剖析 OC 核心特徵。
[obj msg] 在運行時通過 objc_msgSend 查找方法實現(IMP),支援動態添加方法、Method Swizzling、KVO/KVC。Runtime 底層由 C 實現(objc/runtime.h)。SomeClass *obj = [[SomeClass alloc] init];棧上宣告 SomeClass obj; 編譯報錯 interface type cannot be statically allocated。retainCount。alloc/new/copy/retain 增 1;release/autorelease 減 1;歸零時調用 dealloc 釋放記憶體。retain/release,易漏、易過釋、難維護。retain/release/autorelease,規則:strong(預設)、weak(不持有、自動置 nil)、unsafe_unretained、autoreleasing。NSObject,不支援多重繼承(異於 C++)。@protocol MyProtocol ... @end,定義方法清單(可選/必選),類宣告 @interface MyClass : NSObject <MyProtocol> 表示遵守。類似 Java Interface,支援多協議組合,彌補單繼承限制。.m 文件中可直接寫 C 代碼,調用 C 庫零成本。.m 改為 .mm,編譯器識別為 Objective-C++,可在同一文件混寫 OC、C、C++ 代碼,直接調用 C++ 標準庫/第三方庫(如 STL、Boost、OpenCV)。OC 的靈魂在於 Runtime 動態性(訊息傳遞、動態解析、消息轉發)、引用計數記憶體模型、協議導向設計。理解這三點,即掌握了 OC 的精髓。