【问题标题】:Why is memory not freed after a lottie-ios animation view controller is dismissed?为什么在关闭 lottie-ios 动画视图控制器后没有释放内存?
【发布时间】:2020-12-03 08:54:44
【问题描述】:

我有一个带有AnimationViewlottie-ios pod 的类)的视图控制器。动画占用太多内存(大约 800 MB)。但问题是,视图控制器关闭后,内存还是满的。

动画视图创建如下:

var mainAnimation = AnimationView(name: "my_animation_name")

【问题讨论】:

    标签: ios lottie ios-animations


    【解决方案1】:

    问题原因是我使用了旧版本的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 的实现,然后执行以下两个操作之一:

    1. 使cache 属性为非静态的
    2. cache 属性保留为静态,但添加clearCache 方法。 我更喜欢第一个,因为您不需要手动处理缓存清除。

    【讨论】:

      猜你喜欢
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2018-04-27
      • 1970-01-01
      相关资源
      最近更新 更多