我了解到 Swift 使用自動參考計數 (ARC) 進行記憶體管理。我想知道structSwift 中的值型別 ( ) 是如何作業的。
uj5u.com熱心網友回復:
來自ARC 上的 Swift 語言指南:
參考計數僅適用于類的實體。結構和列舉是值型別,而不是參考型別,并且不是通過參考存盤和傳遞的。
自動參考計數僅適用于參考型別,因為這些型別是:
- 總是在堆上分配,因為
- 它們必須存在于記憶體中的穩定位置,以便您可以確定對同一物件的多個參考實際上都指向同一個確切位置(這是物件身份概念的一部分)
這確實意味著某些系統必須跟蹤何時不再參考此類(物件)型別的實體,以便可以清理分配。
相反,值型別與物件沒有相同的標識概念:
- 它們不需要記憶體中的穩定位置,并且值的每個副本都與具有相同屬性的另一個副本無法區分,因此
- 每次參考值型別時,都會按值獲取它的副本(從概念上講;有一些優化可以避免到處進行不必要的復制)
不需要分配值型別,也不需要通過諸如反初始化器之類的東西來維護需要清理的狀態。最終結果是不需要跟蹤值最后一次使用的時間(因為沒有嚴格必要的釋放),因此不需要用于清理的參考計數。
高級說明:值型別可以在堆上分配(尤其是如果它們足夠大),但這是 Swift 的實作細節。如果 astruct被分配,Swift 本身將代表你維護分配和釋放,同時仍然通過value透明地傳遞它。仍然不可能對 this 有多個參考struct,因此參考計數仍然與它無關(例如,參考計數只能是 0 或 1,因此跟蹤沒有意義)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471655.html
