Swinject:使用弱范围会泄漏对象

Posted

技术标签:

【中文标题】Swinject:使用弱范围会泄漏对象【英文标题】:Swinject: Using weak scope is leaking objects 【发布时间】:2017-05-23 13:43:38 【问题描述】:

我在我的 swift 项目中使用 Swinject 进行 DI。我认为使用弱对象范围会导致泄漏。

我有这个虚拟对象

protocol DevTestProtocol: class 
class DevTest: DevTestProtocol 

注册如下(我使用的是程序集)

container.register(DevTestProtocol.self)  _ in
    return DevTest()

.inObjectScope(.weak)

出于测试目的,我在我的应用委托中添加了一个属性

var devTest: DevTestProtocol?

在 applicationDidFinishLaunchingWithOptions 我解析了对象然后忘记它

self.devTest = DI.resolve(DevTestProtocol.self)!
self.devTest = nil

DevTest 实例现在应该消失了吗? 因为不是。它仍然在调试内存图中显示为泄漏。 see screenshot

我猜这不是预期的行为?我错过了什么吗? 对我来说,它看起来像一个错误,它弄乱了我的整个设置。 我们能做些什么呢? GitHub issue

【问题讨论】:

【参考方案1】:

没有内存泄漏,这只是 Xcode 8 内存分析工具中的一个错误。请参阅GitHub issues tracker 的讨论

【讨论】:

我知道,github 的问题是我的 :)

以上是关于Swinject:使用弱范围会泄漏对象的主要内容,如果未能解决你的问题,请参考以下文章

对话范围是不是泄漏?

存储弱参考有时会导致泄漏

列表推导中定义的变量是不是会泄漏到封闭范围内? [复制]

ThreadLocal 内存泄露的根本原因

在 swinject 环境下卡住情节提要控制

媒体基础多个视频播放导致内存泄漏和未定义时间范围后崩溃