swift 中解除循环引用的方法
var block1 : (()->())? = nil
var block2 : (()->())? = nil
var block3 : (()->())? = nil
方法1: 苹果推荐写法
block1 = { [weak self] in
self?.view.backgroundColor = UIColor.red;
}
// 可选绑定
guard let b1 = block1 else{
return
}
// 调用
b1()
方法2: oc 的写法
weak var weakSelf = self
block2 = {
weakSelf?.view.backgroundColor = UIColor.red;
}
// 可选绑定
guard let b2 = block2 else{
return
}
// 调用
b2()
方法3: self 是assign 的 ,不会强引用 ,但是对象释放,指针地址不会改变,如果对象释放,会出现野指针问题
block3 = { [unowned self] in
self.view.backgroundColor = UIColor.red;
}
// 可选绑定
guard let b3 = block3 else{
return
}
// 调用
b3()
}
判断是否 销毁,检查内存泄漏
deinit {
print( "\(self)消失了")
}
网友评论