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对象已经被析构")
}
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。