NSObject(非 OSObject,筆誤已修正)@public、@protected 實例變數與所有公開方法| 類型 | 說明 | 關鍵字 |
|---|---|---|
| 完全重寫 | 子類別提供全新實作,不呼叫父類別 | 直接實作同名方法 |
| 部分重寫 | 擴充父類別行為,保留父類別邏輯 | [super methodName] |
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];
}
三大特徵:
+ 開頭)alloc + 指定初始化器autorelease)| 維度 | 指定初始化器 | 便利建構器 |
|---|---|---|
| 方法性質 | 實例方法 (-) | 類別方法 (+) |
| 職責 | 初始化 + 賦值 | 配置記憶體 + 初始化 + 賦值 |
| 呼叫鏈 | 必須呼叫 [super init...] | 必須呼叫 [self init...] (同類別指定初始化器) |
| 典型命名 | initWith... | classNameWith... 或 + ... |
[super init]return [[self alloc] init...] 即可,無需手動管理記憶體繼承與初始化是 Objective-C 物件模型的基石。掌握指定初始化器與便利建構器的分工協作、遵循 super 呼叫鏈規範、善用 instancetype 提升型別安全,能讓你建構出穩健、可擴充的類別體系。