当Swift中的lazy、weak碰上NSObject
前言 Hi Coder,我是 CoderStar! 今天给大家介绍一个我遇到的小坑。过程大概是这样的,一个复用页面通过不同的入口进入,等返回时,有的正常,有的却出现了 Crash,log 信息如下。 Cannot form weak reference to instance XXXXXX. It is possible that this object was over-released, or is in the process of deallocation. 然后看了一下 Crash 时候的调用栈,发现崩溃在 deinit 时 KVO 释放 Observer 的过程中。一段排查之后,新的坑点出炉了。 具体业务代码就不贴了,贴一个能触发 Bug 的 Demo 吧(不包含使用合理性,仅用来测试 Crash)。 问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 protocol MyServiceDelegate: AnyObject {} class MyService { weak var delegate: MyServiceDelegate? func stop() {} } class MyClass: NSObject, MyServiceDelegate { private lazy var service: MyService = { let service = MyService() service.delegate = self return service }() deinit { service.stop() } } // 测试 func test() { let myClass = MyClass() } 大家觉得这段代码会发生什么?可能大家看了上面的介绍心中已经有了预想的答案。是的,跟上面 Crash 报错信息一致。 ...