破解强引用循环

发布时间:2020-07-31 23:08:55 作者:hehemmm
来源:网络 阅读:423

    Swift提供了两种方法来解决强引用循环问题:弱引用和无主引用


一、弱引用

        弱引用允许循环引用中的一个对象不采用强制方式引用另外一个对象,这样就不会引起强引用循环的问题,弱引用适用于引用对象可以没有值的情况,因为若引用可以没有值,必须将每一个若引用声明为可选类型,使用关键字weak声明若引用对象


   

     class Employee {
                var no:Int
                var name:String
                var job:String
                var salary:Double
                var dept:Department?
                init(no:Int,name:String,job:String,salary:Double){
                        self.no = no
                        self.name = name
                        self.job = job
                        self.salary = salary
    }
                deinit{
                    println("Employee对象已经被析构")
    }
}

    

        class Depatment {
                    var no:Int
                    var name:String
                    weak var manager:Employee?
                    
                    init(no:Int,name:String){
                            self.no = no
                            self.name = name
    }
        
                deinit{
                        println("Department对象已经被析构")
        }
}

二、无主引用


        无主引用与弱引用一样,允许循环引用中的一个对象不采用强引用的方式引用另外一个对象,这样就不会引起强引用循环的问题,无主引用对象适用于引用对象永远有值的情况,它总是被定义为非可选类型,使用关键字unowned表示无主引用

        

        class Depatment {
                    var no:Int
                    var name:String
                    unowned var manager:Employee
                    
                    init(no:Int,name:String){
                            self.no = no
                            self.name = name
    }
        
                deinit{
                        println("Department对象已经被析构")
        }
}

            

推荐阅读:
  1. 闭包中的强引用循环
  2. dll的弱引用和强引用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

破解 强引用循环

上一篇:windows自定义快速启动(运行)命令

下一篇:字符串匹配之通配符问题-

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》