Swift memory管理 – 從會使用weak到問ownership + lifetime

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

探索更多來自 LifeJourney 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

繼續閱讀