ARC如何用武力解开实例

问题描述 投票:3回答:1

我正在努力学习ARC是如何工作的,所以我读了qazxsw poi,我按照他们使用playground在文档中提供的示例:

Swift ARC documentation

我的问题是为什么当我调用class Person { let name: String weak var apartment: Apartment? init(name: String) { self.name = name } deinit { print("\(name) is being deinitialized") } } class Apartment { let unit: String weak var tenant: Person? init(unit: String) { self.unit = unit } deinit { print("Apartment \(unit) is being deinitialized") } } var john: Person? var unit4A: Apartment? john = Person(name: "John Appleseed") unit4A = Apartment(unit: "4A") john?.apartment = unit4A unit4A?.tenant = john john = nil unit4A = nil 实例Person可选:

john

该对象被取消分配,但当我称之为强制解包时:

john?.apartment = unit4A

它不会被取消分配。

swift automatic-ref-counting optional deinit
1个回答
2
投票

在一个简单的Xcode项目中测试你的代码工作得很好,这是一个与游乐场处理对象有关的问题。

然而,当一个john!.apartment = unit4A 没有被称为它可能是一个保留周期问题时,因为ARC无法解除分配强引用,因此不会被解除分配。

看看这个deinit。 另请阅读有关保留周期answer的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.