【发布时间】:2016-10-14 13:44:10
【问题描述】:
Xcode8 显示仪器和内存图存在内存泄漏。我已将其缩小到这一点:从 NSObject 派生会产生泄漏指示。我不知道为什么。
我需要一个 NSObject 以便稍后使用 @objc 指令。
存储在 mDict Dictionary 中的 Test 实例在 Xcode 中被指示为泄漏。
这是作为 iOS Single-View-Application 项目在运行 iOS10.0 的 iPhone5s 模拟器中运行的
import Foundation
class Test: NSObject // <-- derived from NSObject produces leak indication below
{
static var cTest: Test! = nil
var mDict: [String : Test] = Dictionary<String, Test>()
static func test() -> Void {
cTest = Test()
cTest.mDict["test"] = Test() // <-- alleged leak
}
}
class Test // <-- NOT derived from NSObject, NO leak indication
{
static var cTest: Test! = nil
var mDict: [String : Test] = Dictionary<String, Test>()
static func test() -> Void {
cTest = Test()
cTest.mDict["test"] = Test() // <-- NO leak
}
}
// from AppDelegate didFinishLaunchingWithOptions
// ...
Test.test()
// ...
【问题讨论】:
-
尝试在
NSObject示例中将 mDict 声明为weak var。我怀疑在使用后没有释放 mDict 的情况下发生了一个强大的内存循环。 -
谢谢@Danoram。当我尝试得到“弱”时,可能仅适用于类和类绑定协议类型,而不是“字典
”。另外,我希望 mDict 坚持下去,即不弱,但值得尝试收集线索。有趣的是,当显示泄漏时,我可以稍后将 cTest 设置为 nil 并且所有内容都被解除分配。什么都没有泄露。嗯... -
令人着迷。就解决泄漏而言,这可能是您的最佳选择
标签: ios swift memory-leaks nsobject