Swift_ARC自动引用计数(强引用和弱引用)

来源:互联网 发布:百度p2p cdn 知乎 编辑:程序博客网 时间:2024/06/05 09:30


Jason类里面为 weak 弱引用  ROUSI类(可以避免循环强引用)

class Jason {    var name:String?    init(name:String) {        print("Jason 实例化")        self.name = name    }    weak var rousi:ROUSI?        deinit {        print("Jason 销毁")    }}class ROUSI {    var name:String?    init(name:String) {        print("ROUSI 实例化")        self.name = name    }    var jason:Jason?        deinit {        print("ROUSI 销毁")    }}func weakROUSIFucn(){                var ja:Jason? = Jason(name:"Jason") //Jason 实例化        ja!.rousi = ROUSI(name:"ROUSI")     //ROUSI 实例化                var ro:ROUSI? = ROUSI(name:"Jason") //ROUSI 实例化        ro!.jason = Jason(name:"ROUSI")     //Jason 实例化 --> Jason 销毁                ja = nil //Jason 销毁 --> ROUSI 销毁        ro = nil //ROUSI 销毁                            }


Jason 和  ROUSI类 都是弱引用对方 (可以避免循环强引用)

class Jason {    var name:String?    init(name:String) {        print("Jason 实例化")        self.name = name    }    weak var rousi:ROUSI?        deinit {        print("Jason 销毁")    }}class ROUSI {    var name:String?    init(name:String) {        print("ROUSI 实例化")        self.name = name    }    weak var jason:Jason?        deinit {        print("ROUSI 销毁")    }}func weakFucn(){                var ja:Jason? = Jason(name:"Jason") //Jason 实例化        ja!.rousi = ROUSI(name:"ROUSI")     //ROUSI 实例化 --> ROUSI 销毁                var ro:ROUSI? = ROUSI(name:"Jason") //ROUSI 实例化        ro!.jason = Jason(name:"ROUSI")     //Jason 实例化 --> Jason 销毁                ja = nil //Jason 销毁        ro = nil //ROUSI 销毁                }

Jason 和  ROUSI类 都是Strong 强引用对方 (有待验证,官方文档译文是不调用析构函数,但是目前XCode 8.2.1正常)

class Jason {    var name:String?    init(name:String) {        print("Jason 实例化")        self.name = name    }    var rousi:ROUSI?        deinit {        print("Jason 销毁")    }}class ROUSI {    var name:String?    init(name:String) {        print("ROUSI 实例化")        self.name = name    }    var jason:Jason?        deinit {        print("ROUSI 销毁")    }}//strong - strong    func strongToStrong(){                var ja:Jason? = Jason(name:"Jason") //Jason 实例化        ja!.rousi = ROUSI(name:"ROUSI")     //ROUSI 实例化                var ro:ROUSI? = ROUSI(name:"Jason") //ROUSI 实例化        ro!.jason = Jason(name:"ROUSI")     //Jason 实例化                ja = nil //Jason 销毁 --> ROUSI 销毁        ro = nil //ROUSI 销毁 --> Jason 销毁                            }