代码之家  ›  专栏  ›  技术社区  ›  SwiftedMind

每个初始化的PDFDocument(循环内迭代)都会保留在内存中,直到循环完成我能怎么办?

  •  0
  • SwiftedMind  · 技术社区  · 7 年前

    我昨天问了一个类似的问题。问题出在 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文档 在循环完成之前一直保存在内存中我能做点什么吗?

    谢谢您!

    0 回复  |  直到 7 年前