gpt4 book ai didi

memory-management - PDFKit 内存问题 ios12

转载 作者:行者123 更新时间:2023-12-03 14:43:57 25 4
gpt4 key购买 nike

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

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并为每个循环创建一个新的 PDFDocument 对象并使用它。第二个选项确实释放了内存,但速度太慢了。
 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!)
}
}

}

}

最佳答案

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

所以我有一个全局变量

 var document =  PDFDocument()

用它
let pdfURL   = ...
document = PDFDocument(url: pdfURL)!

那么如果内存不足
 override func didReceiveMemoryWarning() {
let pdfURL = ...
document = PDFDocument(url: pdfURL)!
}

关于memory-management - PDFKit 内存问题 ios12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48957766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com