既然Weak和unowned引用都不会增加引用计数,它们都能用于解除引用循环。那么我们该在什么使用它们呢?根据苹果文档:
“Use a weak reference whenever it is valid for that reference to become nil at some point during its lifetime. Conversely, use an unowned reference when you know that the reference will never be nil once it has been set during initialization.”
翻译:在引用对象的生命周期内,如果它可能为nil,那么就用weak引用。反之,当你知道引用对象在初始化后永远都不会为nil就用unowned.
点击bu,self释放,crash
self.commentBu.addTarget(for: .touchUpInside) {[unowned self] bu in
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5, execute: {
self.view.showHUD(title: "1233")
print("12321312")
})
}
点击bu,self释放,正常
self.commentBu.addTarget(for: .touchUpInside) {[unowned self] bu in
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5, execute: {
self?.view.showHUD(title: "1233")
print("12321312")
})
}
网友评论