swift 如何在成功编写文件后优化代码

xeufq47z  于 2022-12-10  发布在  Swift
关注(0)|答案(1)|浏览(131)

创建Pdf
我正在创建一个pdf多个图像无限的图像,但主要问题是pdfKit后写不释放内存,然后问题是应用程序崩溃后1 GB超过任何人都可以帮助我图像到pdf无限的图像。我使用递归函数来释放内存,但在我的情况下内存不释放我分享了代码kidly帮助

func createPdfRecursiveFunction(image:UIImage,imageData:[UIImage],name:String)
    {
        
        autoreleasepool(invoking: {
            let pdfPage = PDFPage(image: image)!
        pdfdocument.insert(pdfPage, at: ImagesCount)
        if ImagesCount == (imageData.count - 1)
        {
            print("Write Successfully")
        }else{
            ImagesCount += 1
            if ImagesCount == (imageData.count - 1)
            {
                self.getAllImage.removeAll()
                self.imagedata.removeAll()
                print("Write Successfully")
                let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
                var outputURL = documentDirectory.appendingPathComponent("PDFReader")
                do {
                    try FileManager.default.createDirectory(at: outputURL, withIntermediateDirectories: true, attributes: nil)
                    outputURL = outputURL.appendingPathComponent("\(name).pdf")
                }catch let error {
                    print(error.localizedDescription)
                }
                _ = autoreleasepool
                   {
                pdfdocument.write(to: outputURL)
                   }
               
            }else{
                createPdfRecursiveFunction(image: imagedata[ImagesCount], imageData: imageData, name: name)
            }
        }})
    }
6uxekuva

6uxekuva1#

问题是您正在从自动释放块本身中递归调用createPdfRecursiveFunction,这意味着在处理完所有图像之前,块不会到达末尾并耗尽。
在自动释放块结束后立即调用createPdfRecursiveFunction,或者将代码分开,以便在带有自动释放块的单独函数中完成pdf工作,例如

createPdfRecursiveFunction() {
   if imageToBeWritten {addImageToPDF(image)}
}

addImageToPDF(image:UIImage) {
    @autoreleasepool {
      // Add image to pdf code here
    }
}

相关问题