初見 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 這樣「超長」簽名,C#/Java 開發者往往感到震驚。實則 Objective-C 採用 **Interleaved Keyword(交織關鍵字)** 風格,將參數名融入方法名,實現「代碼即文檔」。本文深度解析命名規約、調用語法、Xcode 提示機制,助你從抗拒轉為擁抱。
- (返回類型) 關鍵字1:(類型1)參數1 關鍵字2:(類型2)參數2 ...
application:didFinishLaunchingWithOptions:(冒號數 = 參數數)[obj application:app didFinishLaunchingWithOptions:opts] —— 讀起來像英文句子。| 維度 | Java | Objective-C |
|---|---|---|
| 方法聲明 | int add(int a, int b) | - (NSInteger)addA:(NSInteger)a withB:(NSInteger)b |
| 調用 | add(3, 5) | [self addA:3 withB:5] |
| 可讀性 | 需查簽名或 Javadoc 知參數含義 | 調用處即可見「加 A 與 B」 |
| 重載 | 支持同名不同參數 | 不支持,靠不同關鍵字區分 |
initWithFrame:、stringByAppendingString:with、from、to、at 等介詞開頭。isEditable、hasPrefix:、shouldAutorotate。maximumValue 而非 maxVal;常見縮寫(URL、ID、RGB)除外。+ (instancetype)stringWithFormat: 以類名開頭。輸入 [self addA: 時,Xcode 彈出 withB: 佔位符,參數類型、順序一目了然,無需跳轉定義。這正是「命名即文檔」的工程紅利。
objc_msgSend 查找,長度影響可忽略。心法:Objective-C 命名不是為了「寫給編譯器看」,而是為了「寫給 6 個月後的自己和團隊看」。擁抱冗長,收獲清晰。