【发布时间】:2020-12-03 08:54:44
【问题描述】:
我有一个带有AnimationView(lottie-ios pod 的类)的视图控制器。动画占用太多内存(大约 800 MB)。但问题是,视图控制器关闭后,内存还是满的。
动画视图创建如下:
var mainAnimation = AnimationView(name: "my_animation_name")
【问题讨论】:
标签: ios lottie ios-animations
我有一个带有AnimationView(lottie-ios pod 的类)的视图控制器。动画占用太多内存(大约 800 MB)。但问题是,视图控制器关闭后,内存还是满的。
动画视图创建如下:
var mainAnimation = AnimationView(name: "my_animation_name")
【问题讨论】:
标签: ios lottie ios-animations
问题原因是我使用了旧版本的lottie-ios pod – 3.1.8。在旧版本中,BundleImageProvider 具有静态缓存属性
static var cache = [String: UIImage]()
所以即使BundleImageProvider 的所有实例都被取消初始化,这个属性仍然在内存中,因为它是静态的。没有 clearCache 方法。而且该物业不公开。所以我不能直接访问它。在3.1.9版本中,他们去掉了这个属性,问题就解决了。
但如果您仍然需要使用旧版本,还有另一种解决方案
AnimationView 的 init 有 imageProvider: AnimationImageProvider 参数。 AnimationImageProvider 是一个协议。如果传递的属性为 nil,则默认使用 BundleImageProvider。您可以创建自己的AnimationImageProvider 实现并使用它。您可以复制BundleImageProvider 的实现,然后执行以下两个操作之一:
cache 属性为非静态的cache 属性保留为静态,但添加clearCache 方法。
我更喜欢第一个,因为您不需要手动处理缓存清除。【讨论】: