日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

swif-自动引用计数

發(fā)布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。