NSKeyedUnarchiver消耗大量内存,从未释放

时间:2017-04-13 10:01:49

标签: ios swift memory nskeyedunarchiver

我正在处理一个必须处理大型plist文件的应用程序。我可以看到每次读取文件时内存使用量都会增加。

我有三个plist文件a,b和c,总大小为21 MB。

内存使用情况是: 21 MB应用程序启动,没有文件读取, 首次导入三个文件后69 MB, 第二次导入后91 MB, 95 MB第三次导入, 103 MB第4, 105 MB第5, 106 MB 6th。

完成工作的代码:

@IBAction func buttonPressed(_ sender: Any) {
    let files = [ "a", "b", "c" ]

    for fileName in files {
        let _ = load(fileName)
    }
}

func load(_ name: String) -> Any? {
    let documents = Bundle.main.bundlePath as NSString
    let filePath = documents.appendingPathComponent("\(name).plist")
    return NSKeyedUnarchiver.unarchiveObject(withFile: filePath)
}

为什么mem会增加?

Memory usage increases after each import

在乐器上花了很多时间之后我终于将问题归结为行

NSKeyedUnarchiver.unarchiveObject(withFile: filePath)

如果我将该行更改为:

let _ = NSKeyedUnarchiver.unarchiveObject(withFile: filePath)
return ""

问题仍然存在。 unarchiveObject中发生了什么?

我还测试了(在评论中建议)将结果分配给var x然后x = nil,但没有改进。

是否有针对此问题或解决方法的修复方法?

感谢您的阅读。

聚苯乙烯。我已经创建了一个测试项目来说明此repo中的问题

https://github.com/jkufver/unarchiver-mem-issue.git

0 个答案:

没有答案