如何在交叉引用对象中保留惰性实例

问题描述 投票:0回答:0

给定两个相互引用的类,其中一个引用是

weak
,我如何在本地初始化时保留它?这是代码的结构:

class Generator {
    weak var machine: Machine!
    
    public init(for machine: Machine) {
        self.machine = machine
    }
    
    func start() {
        // ... code to start the generator
    }
    
    func generate() {
        machine.didGenerate(value: 1)
    }
}


class Machine {
    public lazy var generator: Generator = Generator(for: self)
    
    func start() {
        generator.start()
    }
    
    func didGenerate(value: Float) {
        // Use the value here
    }
}

以下用法有效(在 MacOS 环境中给出的示例):

let machine = Machine()

func viewDidLoad {
    machine.start()
}

但是这不起作用:

func viewDidLoad {
    let machine = Machine()
    machine.start()
}

不保留

machine
类中的
Generator
引用。 我怎样才能保留它?

尝试使用

unowned
而不是
weak
,但也不起作用。

swift memory-leaks reference automatic-ref-counting weak
© www.soinside.com 2019 - 2024. All rights reserved.