我昨天问了一个类似的问题。问题出在
managedObjectContext
(
Swift - Read many big files from FileManager and save them as NSData in CoreData (every file is somehow kept in memory, which is too much)
)
然而,有人指出,我不应该在数据库中保存大文件,这是合理的,我想:D.所以我修改了代码,并用另一种方式完成了不过,我还是有同样的问题
(我把它作为一个新问题发布,因为代码现在完全不相关了这是另一种情况)
. 我把它归结为这个
(我创建了这个负责内存问题的示例循环)
以下内容:
for _ in 0...20 {
// URL to a pdf file that's 500MB big.
let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("LargeTestPdf.pdf")
let pdf = PDFDocument(data: try! Data(contentsOf: url)) // Loading the pdf
sleep(3) // sleep to make it easier to see the memory usage growing
}
当我运行这个程序时,我看到内存慢慢填满,直到它太多,应用程序崩溃问题是,我需要
PDFDocument
每次循环迭代但都已初始化
PDF文档
不知怎么的,在循环结束前都会留在记忆中。
我也试过:
private var currentPDF: PDFDocument?
...
for _ in 0...20 {
let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("Volume 1.pdf")
currentPDF = PDFDocument(data: try! Data(contentsOf: url))
// doing stuff
currentPDF = nil
sleep(3)
}
为什么每个
PDF文档
在循环完成之前一直保存在内存中我能做点什么吗?
谢谢您!