Level 1
看到 closure + self
→ weak self
Level 2
看到 object A ↔ B
→ weak delegate / weak property
Level 3
看到 object 沒釋放
→ 找 retain cycle
Level 4
看到 object 沒釋放
→ 問:
誰擁有它?
owner 活多久?
它應該活多久?
release condition 是什麼?
Level 5
在設計 architecture 時
→ 一開始就定義 ownership + lifetime
Note:
- 任何會隨使用次數增加的資料結構或資源,都必須回答「它何時縮回來?」即使現在完全沒有 crash,也已經值得懷疑。
- 把memory問題從「有沒有 retain cycle?」,提升成「memory 使用量是否會隨時間與操作次數有界地收斂?」
- 高手和普通工程師有時候不是「答案差很多」,而是一開始問的問題就不同。
============================
所以 Level 4 開始,你已經不能靠「看到 X 就做 Y」了。
你必須建立模型:
Object
│
├── Owner 是誰?
├── Strong reference 從哪來?
├── Owner lifetime 是多少?
├── Object 預期 lifetime 是多少?
├── 什麼條件結束?
└── Cleanup responsibility 在誰?
這也是為什麼一個工程師可能寫Swift,weak self 用得非常熟,卻仍然沒有 ownership model。因為會解 memory leak,和會設計 memory lifetime,其實是兩種能力。
這是工程學習裡很常見的一個現象:
一個局部模型如果足以解掉你遇到的80%問題,人通常不會主動發明更高一層的模型。直到有一天出現沒有 retain cycle,但memory還是不掉。你才會被迫問到底是誰讓它活著?
那一刻才真正從retain-cycle thinking 跳到ownership thinking,再往上則是lifecycle architecture