我有一个使用NSJSONSerialization.JSONObjectWithData
的函数,但是一些内存没有被释放。 所以我就找到了泄漏发生的位置,并具有以下功能进行了测试:NSJSONSerialization.JSONObjectWithData泄漏内存
private func test() {
for var i = 0; i < 100000; i++ {
let toParse = NSString(string: "{ \"Test\" : [ \"Super mega long JSON-string which is super long because it should be super long because it is easier to see the differences in memory usage with a super long JSON-string than with a short one.\" ] }").dataUsingEncoding(NSUTF8StringEncoding)!
let json = try! NSJSONSerialization.JSONObjectWithData(toParse, options: NSJSONReadingOptions(rawValue: 0))
}
}
我的应用程序之前,我叫test()
为11 MB的内存使用率,内存使用率后为74.4 MB(即使我在我的应用中做了一些其他的事情,给系统一些时间来释放内存)...
为什么json
没有发布?
芒迪指出我autoreleasepool
我还没有试过(插入捂脸这里)......所以我改变了代码:
autoreleasepool {
self.test()
}
这并没有什么差别,并因为Xcode中提出的建议,我也试过:
autoreleasepool({() ->() in
self.test()
})
但是,这也没有工作......
P.S .:也许我应该补充一点,我在Xcode 7 GM
中使用Swift 2.0
。
PPS:该test()
功能全是由内
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), {
//... my code ...
self.test()
})
称为但这不应有任何区别...
是啊,我也知道这一点,但我认为应用测试离开后,它会释放内存()......它没”如果我使用你的代码,它可以工作;但我不明白为什么它在测试后不工作()。 并且:谢谢 –