Ios &引用;来自调试器的消息:由于内存问题而终止;带图像

Ios &引用;来自调试器的消息:由于内存问题而终止;带图像,ios,swift,Ios,Swift,我正在尝试从相册中获取图像,此代码从特定相册中获取所有图像,但在滚动时,应用程序将关闭并给出错误“来自调试器的消息:由于内存问题而终止”。请检查代码并找到错误。(我想在没有内存警告的情况下获取所有相册和图像,如“LaLab”应用程序) func fatchImagesfromAlbum(){ DispatchQueue.global(qos:.background).async{ self.photoAssets=self.fetchResult as!PHFetchResult 让fetchO

我正在尝试从相册中获取图像,此代码从特定相册中获取所有图像,但在滚动时,应用程序将关闭并给出错误“来自调试器的消息:由于内存问题而终止”。请检查代码并找到错误。(我想在没有内存警告的情况下获取所有相册和图像,如“LaLab”应用程序)

func fatchImagesfromAlbum(){
DispatchQueue.global(qos:.background).async{
self.photoAssets=self.fetchResult as!PHFetchResult
让fetchOptions=PHFetchOptions()
fetchOptions.predicate=NSPredicate(格式:“mediaType=%d”,PHAssetMediaType.image.rawValue)
self.photoAssets=PHAsset.fetchAssets(在:self.assetCollection,options:fetchOptions中)作为!PHFetchResult
因为我在0中…在0中无效
self.images.append(image!)
让url:NSURL=info![“PHImageFileURLKey”]作为!NSURL
让urlString:String=url.path!
让文件名=(urlString作为NSString)。lastPathComponent
打印(“文件名\(信息!)”)
self.imageName.append(“\(theFileName)”)
self.imagePath.append(“\(urlString)”)
})
打印(self.imagePath)
打印(self.imageName)
DispatchQueue.main.async
{
[无主的自己]在
self.collectionView.reloadData()
}
}
}
PHPhotoLibrary.shared()寄存器(自)
如果fetchResult==nil{
让allPhotosOptions=PHFetchOptions()
AllPhotoOptions.sortDescriptors=[NSSortDescriptor(键:“creationDate”,升序:true)]
fetchResult=PHAsset.fetchAssets(带:allPhotosOptions)
}
}

面对这样的问题;它与使
无主
引用无关。当对象由Objective-C代码或使用Cocoa类创建时,您应该做的是处理,尝试在
autoreleasepool
中调用您的方法:

autoreleasepool {
    fatchImagesfromAlbum()
}
它应该是
fetchImagesfromAlbum
而不是
fatchImagesfromAlbum

引用自:

自动释放池块提供了一种机制,您可以通过该机制放弃 对象的所有权,但避免对象被 立即解除分配(例如,当您从 方法)。通常,您不需要创建自己的自动释放池 块,但在某些情况下,您必须 这样做是有益的

但是,不需要在
自动释放池
中执行整个方法,内存问题的原因可能是由于反复执行
fetchAssets
requestImage
(在
for
循环中)



参考:

您需要创建一个DIPATCH组,然后无论何时运行loop enter group并离开。循环完成迭代后,您可以调用dipatch.notify并重新标记您的UI

“请检查代码并找到错误。”问题在于您的方法。在数组中保存所有UIImage对象根本不是一个好方法。我还尝试使用本地路径加载图像,但它显示“路径不存在”。当我将所有图像添加到文档目录中时,在给定代码中,它将再次显示该错误。如何解决这个错误?
autoreleasepool {
    fatchImagesfromAlbum()
}