Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-在IOS目录中写入/读取gif文件_Ios_Swift_Memory Management_Gif_Nsfilemanager - Fatal编程技术网

Swift-在IOS目录中写入/读取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

我正在创建一个应用程序,在UICollectionView中显示giphy.com中的GIF

我正在使用专用框架Giphy iOS加载GIF,并使用SwiftGifOrigin从加载的数据创建GIF。我正在文档目录中存储gif数据,以供脱机模式使用:

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消耗。我也不知道如何修复它。