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