弱和无主引用用于防止在两个对象各自保持对另一个的引用的情况下的保留周期.我得到弱者的使用,但我没有得到无主的使用.以下是Apple的示例,其中两个对象之一应使用无主参考:
- class Customer {
- let name: String
- var card: CreditCard?
- init(name: String) { self.name = name }
- }
- class CreditCard {
- let number: UInt64
- unowned let customer: Customer
- init(number: UInt64,customer: Customer) {
- self.number = number
- self.customer = customer
- }
- }
这个想法是没有客户就不能存在信用卡.因此,信用卡可以省去使用弱引用所需的可选展开,并且可以使用无主参考.嗯…那么为什么不使用强大的参考?如果对客户的所有其他引用都消失了(这不应该发生?)那么信用卡使用自己的引用会导致崩溃;而使用强引用会导致内存泄漏.咦?两种邪恶之间的选择?最好崩溃,因为在开发和测试期间更容易被注意到?
请帮忙解决一下.谢谢.
这实际上不是问题,因为无论如何,无主参考不会创建任何类型的强参考周期.取消分配Customer对象后,其CreditCard也将立即解除分配.您的CreditCard永远不会有机会引用该已取消分配的客户.