循环引用

// 内存管理,weak 和 unowoned

// ARC

//  下面是会造成循环引用

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  // 循环引用

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

}

*/

你可能感兴趣的:(循环引用)