// 內存管理番枚,weak 和 unowoned
// ARC
//? 下面是會造成循環(huán)引用
class A: NSObject {
let b: B
override init(){
b = B()
super.init()
b.a = self
}
deinit {
print("A deinit")
}
}
class B: NSObject {
//? ? var a: A? = nil? // 循環(huán)引用
weak var a: A? = nil? // 前面加 weak
deinit {
print("B deinit")
}
}
/*
結合實際編碼中再芋,常用的弱引用的有兩個地方
1> 設置 delegate
weak var delegate: B? //
2> 在 self 屬性存儲為閉包時擒权,其中擁有對 self 的引用
lazy var printName: ()->() = { [weak self] in
if let strongSelf = self{
print("")
}
}
這種在閉包參數的位置進行標注的語法結構是將要標注的內容放在原來參數的前面巨税,并使用中括號括起來达吞。如果有多個需要標注的元素的話鸵隧,在同一個中括號內用逗號隔開
標注前
{ (number: Int) -> Bool in
// ...
return true
}
標注后
{ [unowned self, weak someObject] (number: Int) -> Bool in
// ...
return true
}
*/