弱引用和无主引用
在闭包和捕获的实例总是互相引用并且总是同时释放时,将闭包内的捕获定义为无主引用。
相反,在被捕获的引用可能变为 nil 时,定义一个弱引用的捕获。弱引用总是可选项,当实例的引用释放时会自动变为 nil。这使我们可以在闭包体内检查它们是否存在。
注意:
如果被捕获的引用永远不会变为 nil,应该用无主引用而不是弱引用。
var first = 1
self.number = 2
self.testBlock = { [first,unowned self] _ in
print(first,self.number)
}
first = 4
self.number = 4
self.testBlock()
print(self.number,first)
网友评论