swif-自动引用计数
生活随笔
收集整理的這篇文章主要介紹了
swif-自动引用计数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
import UIKit/*
class Person {let name: String//強引用init(name: String) {self.name = nameprint("\(name) is being initialized")}//引用計數(shù)銷毀時deinit {print("\(name) is being deinitialized")}
}
*/class Person {let name: Stringinit(name: String) { self.name = name }var apartment: Apartment?deinit { print("\(name) is being deinitialized") }
}
class Apartment {let unit: Stringinit(unit: String) { self.unit = unit }
// var tenant: Person?
weak var tenant: Person? //弱引用deinit { print("Apartment \(unit) is being deinitialized") }
}class First_Demo2: UIViewController {// var reference1: Person?
// var reference2: Person?
// var reference3: Person?
var john: Person?var unit4A: Apartment?var johnnn: Customer?override func viewDidLoad() {super.viewDidLoad()self.navigationItem.title = "自動引用計數(shù)"self.view.backgroundColor = UIColor.white// let person = Person(name:"wangyalu")//reference1 = Person(name: "John Appleseed")//John Appleseed is being initialized//在你清楚地表明不再使用這個 Person 實例,強引用被斷開時,ARC 會銷毀它:
// reference1 = nil//互為強引用john = Person(name:"wang")unit4A = Apartment(unit:"4A")// Person 實例現(xiàn)在有了一個指向 Apartment 實例的強引 用,而 Apartment 實例也有了一個指向 Person 實例的強引用。因此,當你斷開 john 和 unit4A 變量所持有的強 引用時,引用計數(shù)并不會降為 0 ,實例也不會被 ARC 銷毀:
john!.apartment = unit4Aunit4A!.tenant = john//當你把這兩個變量設為 nil 時,沒有任何一個析構(gòu)函數(shù)被調(diào)用。循環(huán)強引用會一直阻止 Person 和 Apartme nt 類實例的銷毀,這就在你的應用程序中造成了內(nèi)存泄漏。john = nilunit4A = nil//注意:/*在使用垃圾收 的系統(tǒng)里,弱指針有時用來實現(xiàn)簡單的緩沖機制,因為沒有強引用的對象只會在內(nèi)存壓力觸發(fā)垃 圾收 時才被銷毀。但是在 ARC 中,一旦值的最后一個強引用被移除,就會被立即銷毀,這導致弱引用并不適 合上面的用途。*/johnnn = Customer(name: "John Appleseed")johnnn!.card = CreditCard(number: 1234_5678_9012_3456, customer: johnnn!)johnnn = nil// 打印 “John Appleseed is being deinitialized”// 打印 ”Card #1234567890123456 is being deinitialized”
}/*Customer 實例持有對 CreditCard 實例的強引用,而 CreditCard 實例持有對 Customer 實例的無主引用。 由于 customer 的無主引用,當你斷開 johnnn 變量持有的強引用時,再也沒有指向 Customer 實例的強引用了:由于再也沒有指向 Customer 實例的強引用,該實例被銷毀了。其后,再也沒有指向 CreditCard 實例的強引 用,該實例也隨之被銷毀了:*/class Customer {let name: Stringvar card: CreditCard?init(name: String) {self.name = name}deinit { print("\(name) is being deinitialized") }}class CreditCard {let number: UInt64unowned let customer: Customerinit(number: UInt64, customer: Customer) {self.number = numberself.customer = customer}deinit { print("Card #\(number) is being deinitialized") }}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.
}}
?
轉(zhuǎn)載于:https://www.cnblogs.com/sayimba/p/6237240.html
總結(jié)
以上是生活随笔為你收集整理的swif-自动引用计数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tzwhere模块 根据经纬度判断时区
- 下一篇: popover带箭头弹框