我正在处理一个必须处理大型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会增加?
在乐器上花了很多时间之后我终于将问题归结为行
NSKeyedUnarchiver.unarchiveObject(withFile: filePath)
如果我将该行更改为:
let _ = NSKeyedUnarchiver.unarchiveObject(withFile: filePath)
return ""
问题仍然存在。 unarchiveObject
中发生了什么?
我还测试了(在评论中建议)将结果分配给var x
然后x = nil
,但没有改进。
是否有针对此问题或解决方法的修复方法?
感谢您的阅读。
聚苯乙烯。我已经创建了一个测试项目来说明此repo中的问题