自動引用計數
分為:
自動引用計數概念
引用計數策略
如何解決迴圈引用
閉包的迴圈引用
使用的到的關鍵字
weak 弱引用不會影響引用計數,一般時 optional
unowned 無主引用不會影響引用計數,一般時 非optional
概念:
在swift中 自動引用計數是例項的被引用次數儲存起來,當被引用次數變為零的時候,就將其釋放的過程。
自動引用計數可以實現自動資源管理的目的
引用計數策略:
1、強引用 (strong reference) ,引用時會導致引用計數 +1 ,失去引用時會使引用計數 -1
2、弱引用 (weak reference) 不會影響引用計數,一般時 optional
3、無主引用 (unowend reference) 不會影響引用計數,一般時 非optional
example:
class
dog //
析構器釋放
deinit }
引用計數
vardog1 :
dog?
vardog2 :
dog?
vardog3 :
dog?
dog1
= dog
(name:"淘氣
")
//引用計數為1
dog2
= dog1
//引用計數為2
dog3
= dog1
//引用計數為3
輸出 dog
淘氣is init
現在dog
的引用計數為3
取消引用計數
dog1
= nil
//引用計數為2
dog2
= nil
//引用計數為1
("ready nil dog3")
dog3
= nil
//引用計數為
0 呼叫了析構器
輸出 dog
淘氣is init
ready nil dog3
dog
淘氣is denint
表示 dog1,dog2 = nil 後 ,dog3 = nil ,例項才被釋放。
解決迴圈應用
自動引用計數會跟蹤我們所建立的乙個例項的引用數量,當引用計數為0的時候銷毀它,
但是有一種情況使引用計數永遠不能為0 ----------> 迴圈的強引用
迴圈的強引用:
兩個例項相互持有對方的強引用,每個例項都會讓對方一直存在。因為這2個例項永遠不會釋放,占有的資源永遠不會釋放掉,就導致了 — 記憶體洩露
解決迴圈引用的方法:
1、使用弱引用 關鍵字 weak在引用對方類的時候 在 前面 加weak
2、使用無主引用 關鍵字 unowend使用無主引用 注意,型別不能是optional,一定要賦值
example:
class
dogname
deinit }
swift自動引用計數
在少數情況下,arc為了能幫助你管理記憶體,需要更多的關於你的 之間關係的資訊 引用計數僅僅應用於類的例項,結構體和列舉型別是值型別,不是引用型別,也不是通過引用的方式儲存和傳遞 為了使之成為可能,無論你將例項賦值給屬性,常量或者是變數,屬性,常量或者變數,都會對此例項建立強引用。之所以稱之為強引用...
Swift學習之自動引用計數
class person deinit var reference1 person?var reference2 person?var reference3 person?reference1 person name iyaqi 此時會列印 person iyaqi is being initial...
Swift 自動引用計數(ARC)
swift使用自動引用技術 arc 這一機制來跟蹤和管理應用程式的記憶體。通常情況下我們不需要去手動釋放記憶體,因為arc會在類的例項不再被使用時,自動釋放其占有的記憶體。但在有些時候我們還是需要在 中實現記憶體管理。class person deinit 值會被自動初始化為nil,目前還不會引用到...