Xcode8 在仪器和内存图中显示内存泄漏。我已将其缩小为:从 NSObject 派生会产生泄漏指示。我不知道为什么。
我需要一个 NSObject 以便稍后使用 @objc 指令。
存储在 mDict 字典中的测试实例在 Xcode 中被指示为泄漏。
这是在运行 iOS10.0 的 iPhone5s 模拟器中作为 iOS 单 View 应用程序项目运行
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()
// ...
最佳答案
swift 中的内存管理与类的 objective-c 有点不同。与执行 class Test: NSObject
相比,您可能会错过这个特性。
如果您尝试 class Test: AnyObject
,您必须解决您的问题。
或者每次用完后都尝试使用deinit
class Test: NSObject // <-- using deinit
{
static var cTest: Test! = nil
var mDict: [String : Test] = Dictionary<String, Test>()
static func test() -> Void {
cTest = Test()
cTest.mDict["test"] = Test() // <-- alleged leak
}
deinit {
}
}
但最佳做法是将其声明为 weak
变量,例如 weak var test: Test?
在您的情况下
关于ios - 从 NSObject 派生时,Swift iOS 内存泄漏指示 XCode8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044737/