Swift-内存管理(初级)

来源:互联网 发布:数控机床与编程教程 编辑:程序博客网 时间:2024/06/05 11:34

Swift-内存管理(初级)

/*    Swift 内存管理(只有ARC模式,没有MRC模式,不需要手动管理内存,系统自动管理) *//* 3、Swift语言内存管理  (1)内存管理对象:引用类型对象(class类型)  (2)内存管理原则:没有任何引用指向某个对象的时候,系统会自动销毁该对象  (3)通过ARC技术实现 */print("\n3、Swift语言内存管理")class MemARC {    deinit {        print("MemARC deinit")    }}var mem1 = MemARC()var mem2 = mem1var mem3 = MemARC()mem1 = mem3mem2 = mem3/* 4、weak弱引用 *//* 5、unowned弱引用 */print("\n4、weak弱引用")print("5、unowned弱引用")class Ref {    deinit {        print("Ref deinit")    }    func test() {        //强引用,默认的引用方式var strongRef = Ref()//weak引用(安全引用,不会持有该对象,对象销毁时系统会自动将当前对象置为nil)//弱引用一定是一个可选类型weak var weakRef:Ref? = Ref()if let we = weakRef{    we.test()}//弱引用(不是一个可选类型)unowned var unRef:Ref = Ref()//unRef.test()//这是不安全的,给一个已经被释放掉的对象发送一个消息(运行时报错)/* 6、循环强引用 解决:其中一个对象置为弱引用 (ARC非万能,在某些情况下不能很好的解决内存泄漏问题) */print("\n6、循环强引用")class Person {    let name:String    init(name:String) {        self.name = name    }    var apartment:Apartment?    deinit {        print("\(name) is being deinit")    }}class Apartment {    let number:Int    init(number:Int) {        self.number = number    }    //针对两个对象之间的相互循环强引用,使用weak弱引用可以销毁两个对象,解决两对象相互强引用造成的内存泄漏    weak var teant:Person?    deinit {        print("Apartment #\(number) is being deinit")    }}var john:Person?var number73:Apartment?john = Person(name:"John Apple")number73 = Apartment(number:73)john!.apartment = number73number73!.teant = john//两个对象没有被销毁,但是依然不能对两对象进行访问(内存泄漏)john = nilnumber73 = nil/* 7、unowned解决循环强引用 */print("\n7、unowned解决循环强引用")class Customer {    let name:String    var card:CreditCard?    init(name:String) {        self.name = name    }    deinit {        print("\(name) is being deinit")    }}class CreditCard {    let number:UInt64    //unowned解决循环强引用    unowned let customer:Customer    init(number:UInt64,customer:Customer) {        self.number = number        self.customer = customer    }    deinit {        print("Card #\(number) is being deinit")    }}var tom:Customer?tom = Customer(name:"Tom Apple")tom!.card = CreditCard(number:32797979668768,customer:tom!)tom = nil
 




 


 



1 0