在 iOS 中加载 GIF 占用太多内存
Loading GIFs in iOS consumes too much memory
我一直在测试许多开源动画 gif 库,以将 GIF
文件加载到我们的 Swift
项目中。
它们中的大多数都声称是高性能 库,但是,每当我加载动画 gif 时,我的应用程序都会使用大约 8MB 的内存。
问题是这个专用内存space似乎永远不会被释放。我们可以看到它呈线性增长:
这让我怀疑我在这里做的事情是否正确。这种行为是正确的,还是对用户不利?
您需要手动删除 Gif 图像才能将它们从内存中清除。
示例: gifViwer 可以作为您在本示例中的 Gif 查看器
self.gifViewer.removeFromSuperview()
self.gifViewer = nil
如果您必须分配代表,那么您也可以添加
self.gifViewer.Delegate = nil
注意: 您需要 运行 在完全卸载 viewControler
时执行此操作,因为应用程序将开始在 gifViewer
视图已被删除。如果您需要在不卸载视图的情况下从内存中清除 gif 图像,那么我建议使用上述步骤,然后以编程方式将视图添加到 superView。这不适用于界面设计器和 IBOutlets
let gifViewer = yourGifViewerClass(frame: CGRect(x: 20, y: 20, width: self.view / 2, height: self.view / 2))
// setup your gifViewer
我一直在测试许多开源动画 gif 库,以将 GIF
文件加载到我们的 Swift
项目中。
它们中的大多数都声称是高性能 库,但是,每当我加载动画 gif 时,我的应用程序都会使用大约 8MB 的内存。
问题是这个专用内存space似乎永远不会被释放。我们可以看到它呈线性增长:
这让我怀疑我在这里做的事情是否正确。这种行为是正确的,还是对用户不利?
您需要手动删除 Gif 图像才能将它们从内存中清除。
示例: gifViwer 可以作为您在本示例中的 Gif 查看器
self.gifViewer.removeFromSuperview()
self.gifViewer = nil
如果您必须分配代表,那么您也可以添加
self.gifViewer.Delegate = nil
注意: 您需要 运行 在完全卸载 viewControler
时执行此操作,因为应用程序将开始在 gifViewer
视图已被删除。如果您需要在不卸载视图的情况下从内存中清除 gif 图像,那么我建议使用上述步骤,然后以编程方式将视图添加到 superView。这不适用于界面设计器和 IBOutlets
let gifViewer = yourGifViewerClass(frame: CGRect(x: 20, y: 20, width: self.view / 2, height: self.view / 2))
// setup your gifViewer