强引用和弱引用
弱引用是一种不会对其引用的实例保持强控制的引用,因此不会阻止 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
所以我们使用unowned
which 表示:
我想要一个弱引用,它总是会被填充。