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 销毁
}
本文介绍了Swift中如何使用弱引用避免循环强引用的问题,并通过示例对比了弱引用与强引用的不同效果。
518

被折叠的 条评论
为什么被折叠?



