對於初次接觸 iOS 或 macOS 開發的工程師,Objective-C 乍看之下可能像「火星文」——滿屏的中括號、減號、NS 開頭的類別名稱,讓人摸不著頭緒。其實只要釐清三個核心概念:Xcode、Objective-C 語言、Cocoa 框架,一切就會豁然開朗。
Xcode 相當於 Visual Studio、NetBeans 或 IntelliJ IDEA,是 Apple 官方提供的整合開發環境(IDE)。它包含程式碼編輯器、除錯器、模擬器、Interface Builder(介面設計工具)等完整工具鏈。早期 Interface Builder 是獨立 App,現已整合進 Xcode,可直接拖拉元件設計 UI,並自動產生對應程式碼。
Objective-C 在 C 語言基礎上加入 Smalltalk 風格的訊息傳遞機制,是一門嚴格的超集合:所有合法的 C 程式碼皆可直接在 Objective-C 中編譯執行。它引入了類別、繼承、協定等物件導向特性,並採用動態執行期,支援動態綁定、動態型別等進階特性。
Cocoa(macOS)與 Cocoa Touch(iOS)是 Apple 提供的應用層框架,內含海量現成類別:UI 元件、資料儲存、網路通訊、多媒體處理等。正如喬布斯所言:「提高效率不是寫更多代碼,而是消滅 70% 的代碼。」善用框架,專注業務邏輯,才是正道。
在類別實作區塊(@implementation)中,- 代表實例方法,+ 代表類別方法(靜態方法)。例如:
@implementation Student
- (int)getAge { return age; }
- (void)setAge:(int)newAge { age = newAge; }
@end
[ ]:訊息傳遞語法Objective-C 採用「訊息傳遞」而非「函式呼叫」。[receiver message] 表示向接收者發送訊息。執行期由 objc_msgSend 動態解析並轉發。例如:
Student *stu = [Student alloc];
stu = [stu init];
這相當於其他語言的 new Student(),但明確區分記憶體配置(alloc)與初始化(init)兩階段。
NS 前綴:歷史的印記NS 來自 NeXTSTEP——喬布斯離開 Apple 後創辦 NeXT 公司開發的作業系統。Mac OS X 核心即基於 NeXTSTEP,故其基礎類別(NSString、NSArray、NSLog 等)保留 NS 前綴。其他常見前綴:
CF:Core Foundation(C 語言介面)CG:Core Graphics(2D 繪圖)CA:Core Animation(動畫)UI:UIKit(iOS UI 元件)#import:更智慧的標頭引入類似 C/C++ 的 #include,但自動防止重複引入,無需撰寫防衛巨集(#ifndef...#endif)。
| 類型/關鍵字 | 說明 |
|---|---|
id | 通用物件指標,可指向任意 Objective-C 物件,相當於 void* 但帶有型別資訊 |
BOOL, YES, NO | 布林型別,YES=1、NO=0,底層為 signed char |
nil | 空物件指標,傳送訊息給 nil 安全無效(回傳 0/nil),不同於 C++ 會崩潰 |
@"" | 字面常數字串,編譯器自動建立 NSString 物件;純 C 字串用 "" |
注意:
NSLog(@\"中文\")在早期版本可能無法正確輸出中文,需確保原始碼儲存為 UTF-8 並使用正確編碼設定。
下一步建議:動手建立第一個 Xcode 專案,嘗試用 NSLog 輸出變數、在 Interface Builder 拉一個按鈕並連接 IBAction,感受「寫少做多」的開發體驗。