Objective-C 以「類」為核心組織代碼,分為 @interface(宣告)與 @implementation(實現)兩部分。本文以分數類 Fraction 為例,演示完整類定義與使用流程。
// Fraction.h / main.m 合併展示 #import// 1. @interface:聲明類繼承關系、實例變量、公開方法 @interface Fraction : NSObject { int numerator; // 分子 int denominator; // 分母 } - (void)print; // 打印分數 - (void)setNumerator:(int)n; // 設置分子 - (void)setDenominator:(int)d; // 設置分母 @end // 2. @implementation:實現方法、可再次聲明實例變量 @implementation Fraction - (void)print { NSLog(@"這個分數是:%i/%i", numerator, denominator); } - (void)setNumerator:(int)n { numerator = n; } - (void)setDenominator:(int)d { denominator = d; } @end // 3. main:使用類 int main(int argc, const char * argv[]) { @autoreleasepool { // 分配 + 初始化(兩步合一常用 [[Fraction alloc] init]) Fraction *myFraction = [[Fraction alloc] init]; // 消息發送調用方法 [myFraction setNumerator:1]; [myFraction setDenominator:3]; [myFraction print]; // 輸出: 這個分數是:1/3 } return 0; }
| 概念 | 說明 |
|---|---|
@interface | 公共契約:父類、實例變量、方法簽名。對應 .h 文件 |
@implementation | 私有實現:方法代碼、可補充實例變量。對應 .m 文件 |
alloc | 類方法:分配原始內存,isa 指向類對象,實例變量歸零 |
init | 實例方法:初始化實例變量,返回 self(可返回不同對象) |
[obj msg] | 消息發送:動態綁定,運行時查找 IMP。非函數調用 |
@autoreleasepool | 自動釋放池上下文:管理手動內存對象生命週期(ARC 環境下仍建議保留) |
- (void)setNum:(int)n andDen:(int)d; 選擇器為 setNum:andDen:[obj setNum:1 andDen:3],自我文檔化- (void)printalloc/init 得到 retainCount=1,需手動 release@autoreleasepool 仍需保留**以釋放 autorelease 對象@property 可自動生成 setter/getter + 實例變量這個 Fraction 例子雖簡單,卻包含了 Objective-C 類機制的全部核心要素:**聲明、實現、分配、初始化、消息發送、內存管理**。打牢這塊基石,Cocoa 開發大廈才能穩固起樓。