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

本文介绍了Swift中如何使用弱引用避免循环强引用的问题,并通过示例对比了弱引用与强引用的不同效果。


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 销毁
        
        
        
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值