Swift-在IOS目录中写入/读取gif文件
我正在创建一个应用程序,在UICollectionView中显示giphy.com中的GIF 我正在使用专用框架Giphy iOS加载GIF,并使用SwiftGifOrigin从加载的数据创建GIF。我正在文档目录中存储gif数据,以供脱机模式使用:Swift-在IOS目录中写入/读取gif文件,ios,swift,memory-management,gif,nsfilemanager,Ios,Swift,Memory Management,Gif,Nsfilemanager,我正在创建一个应用程序,在UICollectionView中显示giphy.com中的GIF 我正在使用专用框架Giphy iOS加载GIF,并使用SwiftGifOrigin从加载的数据创建GIF。我正在文档目录中存储gif数据,以供脱机模式使用: lazy var documentsPath: URL = { return try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, approp
lazy var documentsPath: URL = {
return try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
}()
lazy var gifsPath: URL = {
let path = self.documentsPath.appendingPathComponent("gifs")
try? FileManager.default.createDirectory(at: path, withIntermediateDirectories: false, attributes: nil)
return path
}()
func save(data: Data, named: String) {
let path = gifsPath.appendingPathComponent(named)
(data as NSData).write(to: path, atomically: true)
}
但读取数据(或转换为gif)会占用大量内存并降低应用程序性能,尽管该操作是在后台队列中执行的
DispatchQueue.global(qos: .background).async {
let image = UIImage.gif(url: someExistingPath)
DispatchQueue.main.async {
imageView.image = image
}
}
我试图从目录中读取数据,然后将其转换为gif,但得到了相同的效果。当我获得存储方法时,应用程序工作顺利,所以数据加载没有问题
即使在后台队列中,什么会导致短暂冻结?如何以正确的方式将GIF存储到应用程序文件夹中以供脱机使用?或者我如何读取数据并创建GIF而不冻结
另外,我一次将屏幕上的GIF数量减少到2个,但应用程序仍然有问题。如果您在主线程上调用save(),则可能会减慢速度。将其发送到后台。老实说,你最好的办法是运行仪器,看看什么东西慢。它将告诉您什么占用了CPU,什么占用了主线程。@DavidShaw谢谢,但我检查了两次,它不在主队列中。无论如何,这个应用程序的阅读速度慢了,而不是写作速度慢了。我最好的猜测是gif创建的RAM消耗。我也不知道如何修复它。