提问人:user4779109 提问时间:11/7/2023 更新时间:11/7/2023 访问量:68
Swift:确保 arrary 中对象的反初始化
Swift: Ensuring deinitialization of objects in arrary
问:
我是 Swift ARC 的新手,我可能遇到以下 swift 代码的内存问题:
class Device {
let name: String
var ports: [Port]
init(name: String, ports: [Port] = []) {
self.name = name
self.ports = ports
}
}
class Port {
let name: String
let device: Device
init(name: String, device: Device) {
self.name = name
self.device = device
}
}
在提供的 Swift 代码中,设备对象包含端口数组,每个端口对象都与特定设备相关联。只要设备的端口存在,它就应该保留在内存中,并且端口的设备永远不应该为零。有时,端口应仅保留在设备的端口数组中,而不应保留任何其他引用。但是使用上面的代码,未使用的实例将永远保留在内存中,并且会越来越多。
我已经测试了以下内容:
1.) 在 Port 类中。这样我就不能再做这样的事情了,因为设备会立即被释放(在视图更改后):weak let device: Device?
let device = Device(name: "name")
let port = Port(name: "port", device: device)
将视图更改为带端口对象的 PortView / 不带设备对象 --> 设备获取已取消初始化。
2.) 弱数组(带有属性包装器)。但是,如果数组中的端口较弱,则当没有其他引用时(逻辑上),它们也会立即被取消初始化 - 但有时故意不引用它们,因此它们必须保留在数组中。
我的思维错误在哪里?
答: 暂无答案
评论
Device
ports
device
port