Ios 启动循环后由于内存问题而终止
让我解释一下我试图构建什么,所以我为一个包含许多PDF文件的展会开发了一个应用程序。我编写了一个加载所有PDF文件的预加载代码(PDF转换为图像,并在将文件路径存储在数组中后按文件保存)。它工作得很好,但过了一段时间,我遇到了内存问题,因为函数不会释放内存。那么有没有办法释放我的记忆呢 以下是我的函数(方法): 以及启动函数的initViewController:Ios 启动循环后由于内存问题而终止,ios,swift,Ios,Swift,让我解释一下我试图构建什么,所以我为一个包含许多PDF文件的展会开发了一个应用程序。我编写了一个加载所有PDF文件的预加载代码(PDF转换为图像,并在将文件路径存储在数组中后按文件保存)。它工作得很好,但过了一段时间,我遇到了内存问题,因为函数不会释放内存。那么有没有办法释放我的记忆呢 以下是我的函数(方法): 以及启动函数的initViewController: @IBAction func startRoot(sender: AnyObject) { startButton.hid
@IBAction func startRoot(sender: AnyObject) {
startButton.hidden = true
Dispatch.async {
PDF1.delegate = self
PDF1.PDFtoImagesOnePages()
PDF1.delegate = nil
PDF2.delegate = self
PDF2.PDFtoImagesOnePages()
PDF2.delegate = nil
PDF3.delegate = self
PDF3.PDFtoImagesOnePages()
PDF3.delegate = nil
PDF4.delegate = self
PDF4.PDFtoImagesOnePages()
PDF4.delegate = nil
PDF5.delegate = self
PDF5.PDFtoImagesOnePages()
PDF5.delegate = nil
PDF6.delegate = self
PDF6.PDFtoImagesOnePages()
PDF6.delegate = nil
PDF7.delegate = self
PDF7.PDFtoImagesOnePages()
PDF7.delegate = nil
/*
PDF8.delegate = self
PDF8.PDFtoImagesOnePages()
PDF9.delegate = self
PDF9.PDFtoImagesOnePages()
PDF10.delegate = self
PDF10.PDFtoImagesOnePages()
PDF11.delegate = self
PDF11.PDFtoImagesOnePages()
PDF12.delegate = self
PDF12.PDFtoImagesOnePages()
PDF13.delegate = self
PDF13.PDFtoImagesOnePages()
PDF14.delegate = self
PDF14.PDFtoImagesOnePages()
PDF15.delegate = self
PDF15.PDFtoImagesOnePages()
PDF16.delegate = self
PDF16.PDFtoImagesOnePages()
PDF17.delegate = self
PDF17.PDFtoImagesOnePages()
PDF18.delegate = self
PDF18.PDFtoImagesOnePages()
PDF19.delegate = self
PDF19.PDFtoImagesOnePages()
PDF20.delegate = self
PDF20.PDFtoImagesOnePages()
PDF21.delegate = self
PDF21.PDFtoImagesOnePages()
PDF22.delegate = self
PDF22.PDFtoImagesOnePages()
PDF23.delegate = self
PDF23.PDFtoImagesOnePages()
*/
Dispatch.main {
self.textLabel.text = "DONE"
self.performSegueWithIdentifier("startRoot", sender: self)
}
}
我自己用“自动释放池”解决了这个问题
@IBAction func startRoot(sender: AnyObject) {
startButton.hidden = true
Dispatch.async {
PDF1.delegate = self
PDF1.PDFtoImagesOnePages()
PDF1.delegate = nil
PDF2.delegate = self
PDF2.PDFtoImagesOnePages()
PDF2.delegate = nil
PDF3.delegate = self
PDF3.PDFtoImagesOnePages()
PDF3.delegate = nil
PDF4.delegate = self
PDF4.PDFtoImagesOnePages()
PDF4.delegate = nil
PDF5.delegate = self
PDF5.PDFtoImagesOnePages()
PDF5.delegate = nil
PDF6.delegate = self
PDF6.PDFtoImagesOnePages()
PDF6.delegate = nil
PDF7.delegate = self
PDF7.PDFtoImagesOnePages()
PDF7.delegate = nil
/*
PDF8.delegate = self
PDF8.PDFtoImagesOnePages()
PDF9.delegate = self
PDF9.PDFtoImagesOnePages()
PDF10.delegate = self
PDF10.PDFtoImagesOnePages()
PDF11.delegate = self
PDF11.PDFtoImagesOnePages()
PDF12.delegate = self
PDF12.PDFtoImagesOnePages()
PDF13.delegate = self
PDF13.PDFtoImagesOnePages()
PDF14.delegate = self
PDF14.PDFtoImagesOnePages()
PDF15.delegate = self
PDF15.PDFtoImagesOnePages()
PDF16.delegate = self
PDF16.PDFtoImagesOnePages()
PDF17.delegate = self
PDF17.PDFtoImagesOnePages()
PDF18.delegate = self
PDF18.PDFtoImagesOnePages()
PDF19.delegate = self
PDF19.PDFtoImagesOnePages()
PDF20.delegate = self
PDF20.PDFtoImagesOnePages()
PDF21.delegate = self
PDF21.PDFtoImagesOnePages()
PDF22.delegate = self
PDF22.PDFtoImagesOnePages()
PDF23.delegate = self
PDF23.PDFtoImagesOnePages()
*/
Dispatch.main {
self.textLabel.text = "DONE"
self.performSegueWithIdentifier("startRoot", sender: self)
}
}
func PDFtoImagesOnePages()
{
let path: String = NSBundle.mainBundle().pathForResource(PDFname, ofType: "pdf")!
let url: NSURL = NSURL.fileURLWithPath(path)
let pdfDoc: CGPDFDocumentRef = CGPDFDocumentCreateWithURL(url)!
let pageCount = CGPDFDocumentGetNumberOfPages(pdfDoc)
for index in 1...pageCount
{
autoreleasepool({ () -> () in
let page = CGPDFDocumentGetPage(pdfDoc, index)
let pageRect = CGPDFPageGetBoxRect(page, .MediaBox)
UIGraphicsBeginImageContextWithOptions(pageRect.size, true, 0)
let context = UIGraphicsGetCurrentContext()
CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
CGContextFillRect(context,pageRect)
CGContextTranslateCTM(context, 0.0, pageRect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawPDFPage(context, page);
let img = UIGraphicsGetImageFromCurrentImageContext()
// MARK: - Write image to user path
var documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
documentsPath = documentsPath.stringByAppendingFormat("/\(PDFname)\(index).jpg")
UIGraphicsEndImageContext()
imageData = UIImageJPEGRepresentation(img, 5)
imageData!.writeToFile(documentsPath, atomically: true)
// MARK: - Array imagePath
imagePath.append(documentsPath)
})
// MARK: - Counter for UIProgressView
progressPDF = progressPDF + 0.001008064
progressHolder = progressHolder + 0.001008064
print("value from progressPDF: \(progressPDF)")
}
}