整理 Objective-C 實例變數存取控制、方法類型與聲明語法、初始化方法、導入機制 (`#import`/`@class`)。
| 修飾詞 | 可見範圍 | 備註 |
|---|---|---|
| @public | 類別內外皆可 (`obj->ivar`) | 破壞封裝,**不建議使用** |
| @protected | 本類別與子類別 (預設) | 平衡封裝與繼承 |
| @private | 僅本類別 | 最高封裝 |
@interface Person : NSObject {
@public NSString *hobby;
@protected NSString *name; NSInteger age; /* 預設 protected */
@private NSString *sex;
}
@end
/* 實例變數 _age 或 age */
- (void)setAge:(NSInteger)age; /* set + 首字母大寫 */
- (NSInteger)age; /* 同變數名 (忽略底線) */
- (instancetype)initWithName:(NSString *)name sex:(NSString *)sex {
self = [super init];
if (self) { _name = name; _sex = sex; }
return self;
}
Objective-C 採訊息傳送:`[receiver message]`。
非「呼叫方法」,而是「向接收者發送訊息」。接收者查找並執行對應方法 (動態綁定)。
/* Teacher.h */
@class Student; /* 前向宣告 */
@interface Teacher : NSObject { Student *_student; } ... @end
/* Student.h */
@class Teacher;
@interface Student : NSObject { Teacher *_myTeacher; } ... @end
/* .m 檔再 #import 完整頭文件 */
善用 `@protected`/`@private` 封裝實例變數、標準化存取器命名、理解訊息傳送動態特性、用 `@class` 解決循環導入,是撰寫健壯 Objective-C 程式的基礎。