强引用和弱引用
弱引用是一种不会对其引用的实例保持强控制的引用,因此不会阻止 ARC 处理引用的实例。
因此,当 A 对 B 有弱引用时,则 A不是所有者。
示例(其中 A 是Bone并且 B 是Dog)
class Dog {
var bone: Bone?
}
class Bone {
weak var belongsTo: Dog?
}
强参考
这里 aDog 可以有一个Bone. 在这种情况下,它就是那个 Bone 的所有者。所以这个bone属性是一个强参考。
弱引用Bone可以属于Dog
。但是我们需要将该belongsTo属性声明为弱,否则我们有一个强保留周期(这意味着一旦我们完成了这些对象,ARC 就不会释放它们)。
重要提示:在这种情况下,可以Dog存在而没有Bone. Bone罐头没有Dog. _ _
无主引用
让我们看另一个例子
class Person {
var creditCard: CreditCard?
}
class CreditCard {
unowned var owner: Person
init(owner: Person) {
self.owner = owner
}
}
同样,Person 可以拥有一个 CreditCard,因此它具有一个对CreditCard.
然而,没有人就CreditCard 不能存在。对?所以在内部CreditCard我们想要一个总是被填充的属性,但我们也希望它是弱的。
像这样的东西
weak var owner: Person
error: 'weak' variable should have optional type 'Person?'
但是必须声明一个弱属性,Optional所以我们使用unownedwhich 表示:
我想要一个弱引用,它总是会被填充。