首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ios12的PDFKit内存问题

ios12的PDFKit内存问题
EN

Stack Overflow用户
提问于 2018-02-24 07:45:25
回答 1查看 868关注 0票数 6

已将此问题编辑为使用代码的更简单版本。TestPDF全是文本,大约有300页。当循环运行时,它在消耗2 2gb内存后崩溃。打印后,我不需要print语句中的值。但是,代码会将其保存在内存中。如何在循环结束前清除print语句内容的内存分配?

代码语言:javascript
复制
func loadPDFDocument(){
        let documentURL = Bundle.main.url(forResource: "TestPDF", withExtension: "pdf")!

        if let document = PDFDocument(url: documentURL) {

            for page in 1...document.pageCount {
                DispatchQueue.global().async {
                print(document.page(at: page)!.string!)
                }
            }

        }

    }

我尝试过的解决方案包括autoreleasepool和在for each循环中创建一个新的PDFDocument对象并使用该对象。第二种选择确实释放了内存,但太慢了。

代码语言:javascript
复制
 func loadPDFDocument(){
        let documentURL   = Bundle.main.url(forResource: "TestPDF", withExtension: "pdf")!

     if let document      = PDFDocument(url: documentURL) {



            for page in 1...document.pageCount {
                 DispatchQueue.global().async {
                  let innerDocument = PDFDocument(url: documentURL)!
                     print(innerDocument.page(at: page)!.string!)
                    }
              }

            }

        }
EN

回答 1

Stack Overflow用户

发布于 2019-03-26 17:14:10

到目前为止,我的解决方案是在didReceiveMemoryWarning中重新加载PDFDocument

所以我有一个全局变量

代码语言:javascript
复制
 var document =  PDFDocument()

使用它

代码语言:javascript
复制
let pdfURL   = ...
     document =   PDFDocument(url: pdfURL)! 

如果内存不足

代码语言:javascript
复制
 override func didReceiveMemoryWarning() {
    let pdfURL   = ...
        document =  PDFDocument(url: pdfURL)! 
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48957766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档