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


一、弱引用

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


classEmployee{varno:Intvarname:Stringvarjob:Stringvarsalary:Doublevardept:Department?init(no:Int,name:String,job:String,salary:Double){self.no=noself.name=nameself.job=jobself.salary=salary}deinit{println("Employee对象已经被析构")}}

classDepatment{varno:Intvarname:Stringweakvarmanager:Employee?init(no:Int,name:String){self.no=noself.name=name}deinit{println("Department对象已经被析构")}}

二、无主引用


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

classDepatment{varno:Intvarname:Stringunownedvarmanager:Employeeinit(no:Int,name:String){self.no=noself.name=name}deinit{println("Department对象已经被析构")}}