Swift - 向/从IOS目录

时间:2017-02-07 20:38:16

标签: ios swift memory-management gif nsfilemanager

我正在创建一个在UICollectionView中显示来自giphy.com的gif的应用程序。

我使用专用框架 Giphy-iOS 来加载GIF和 SwiftGifOrigin 来从加载的数据创建gif。我使用以下方法将GIF的数据存储在Documents目录中以用于离线模式:

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存储到app文件夹以进行脱机?或者我如何在不冻结的情况下读取数据并创建GIF?

另外,我一次在屏幕上将GIF数量减少到2,但app仍然很小。

0 个答案:

没有答案