Objective-C 命名規則與記憶體管理概念示意圖

← INSIGHTS & PERSPECTIVES | 前端開發

Objective-C 命名規則(Naming Convention)與記憶體管理入門筆記

整理 Objective-C 的命名規則(Naming Convention)與記憶體管理重點:類別與變數命名原則、ARC 與 MRC 常見問題、@autoreleasepool 用法,以及 strong 與 weak 的差別與陷阱。

這篇筆記解決兩個 Objective-C 初學者最容易踩坑的問題:程式碼該怎麼命名才清楚易讀,以及 iOS 沒有 GC(垃圾回收)時該如何管理記憶體。內容涵蓋類別、變數、方法的命名原則,ARC 與非 ARC 各自容易發生的記憶體問題、@autoreleasepool 的用法,還有 strongweak 的差別。

為什麼命名規則(Naming Convention)這麼重要?

好的命名要符合三個原則:

  1. 具解釋性:看名字就知道它在做什麼
  2. 清楚:不模稜兩可
  3. 不會混淆:不會跟其他東西搞混

類別、變數、方法分別該怎麼命名?

  • 類別名稱
    • 第一個字大寫
    • 前置 namespace(在 Xcode 新增專案時會有 Class Prefix 欄位,就是在設定這個)
    • 駝峰式的寫法(Camel Case)
  • 方法名稱:可以清楚表明意思
  • 參數名稱:避免和 ivar(實體變數)同名

變數名稱要表明型別嗎?

變數類型不需特別表明,但可以用名稱去讓人聯想型別,例如:

BOOL isEditable;
NSString *accountName;
NSMutableArray *mailBoxes;
UIImage *previewPaneImage;
NSDictionary *messageDict;

可以看到慣例:BOOLis 開頭、集合變數用複數、型別資訊(ImageDict)直接放進名稱結尾,讀起來一目了然。

iOS 沒有 GC,記憶體要怎麼管理?

iOS 沒有 GC,記憶體管理的基本概念是:

  1. 配置記憶體:alloc;清除記憶體:dealloc
  2. 兩種常見的記憶體問題:
    • Zombie(殭屍物件):不該用到卻用到(值為 nil 的物件被存取)
    • Memory leak(記憶體洩漏):已經沒辦法存取,卻沒把記憶體清掉
  3. 使用 ARC 比較容易發生 zombie;不用 ARC(MRC)則容易發生 memory leak
  4. 若某段程式碼會用到大量記憶體,可以用 @autoreleasepool { ... } 包起來:
    • 缺點:速度會慢一些
    • 優點:記憶體狀況較好(在 iOS 上,記憶體比速度更重要的場景很多)
@autoreleasepool {
    // 大量配置物件的程式碼
}

strong 與 weak 有什麼差別?

  • 變數宣告為 strong:這個變數會增加物件 retain 的值
  • 宣告為 weak:不會增加 retain 值,比較像「依賴」的關係——當主要 strong 的變數被刪除了,weak 裡的值也會變為空值(nil
  • strong 會增加 retain 值,所以主要變數被刪除後,因為 retain 還是大於 1,物件的記憶體並不會被釋放——要小心 memory leak(典型例子就是 delegate 或兩個物件互相 strong 參考造成的循環保留)

常見問題

QObjective-C 的類別名稱一定要加前綴嗎?

建議加上。在 Xcode 新增專案時設定的 Class Prefix 就是 namespace 前綴,可以避免自己的類別和第三方套件或系統框架的類別撞名,也讓程式碼一眼就能辨認來源。

QARC 是什麼?用了 ARC 就不用管記憶體嗎?

ARC(Automatic Reference Counting)會在編譯期自動插入 retain/release 呼叫,大幅減少手動管理的心力。但它不是 GC,循環參考或誤用 weak/strong 仍會造成 memory leak 或 zombie 問題,基本觀念還是要懂。

Q什麼時候該用 @autoreleasepool?

當某段程式碼會在迴圈中或一次建立大量臨時物件時,用 @autoreleasepool { ... } 包起來可以讓臨時物件盡早釋放,避免記憶體峰值過高。代價是速度略慢,但在 iOS 上記憶體通常比速度更珍貴。

Qweak 指標指向的物件被釋放後會怎樣?

weak 只是依賴關係,不會增加 retain 值。當被指向的物件釋放後,weak 變數會自動變成 nil,不會產生懸掛指標——這也是它適合用在 delegate 的原因。

參考資料

  • 本文為個人上課筆記(iOS 應用程式開發入門課程),無外部連結。

延伸閱讀

最後更新

2026-08-28(原文發布於 2013-08-06,本文保留原始筆記內容並補上 GEO 結構。)

關於作者

Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。

首次發布:2013-08-06