Wallpaper_Home/wallpaper_project/Pods/lottie-ios/Sources/Public/AnimationCache/DefaultAnimationCache.swift
2024-04-17 14:37:20 +08:00

68 lines
1.8 KiB
Swift

//
// DefaultAnimationCache.swift
// Lottie
//
// Created by Marcelo Fabri on 10/18/22.
//
import Foundation
// MARK: - DefaultAnimationCache
/// A thread-safe Animation Cache that will store animations up to `cacheSize`.
///
/// Once `cacheSize` is reached, animations can be ejected.
/// The default size of the cache is 100.
///
/// This cache implementation also responds to memory pressure.
public class DefaultAnimationCache: AnimationCacheProvider {
// MARK: Lifecycle
public init() {
cache.countLimit = Self.defaultCacheCountLimit
}
// MARK: Public
/// The global shared Cache.
public static let sharedCache = DefaultAnimationCache()
/// The maximum number of animations that can be stored in the cache.
public var cacheSize: Int {
get { cache.countLimit }
set { cache.countLimit = newValue }
}
/// Clears the Cache.
public func clearCache() {
cache.removeAllValues()
}
public func animation(forKey key: String) -> LottieAnimation? {
cache.value(forKey: key)
}
public func setAnimation(_ animation: LottieAnimation, forKey key: String) {
cache.setValue(animation, forKey: key)
}
// MARK: Private
private static let defaultCacheCountLimit = 100
/// The underlying storage of this cache.
/// - We use the `LRUCache` library instead of `NSCache`, because `NSCache`
/// clears all cached values when the app is backgrounded instead of
/// only when the app receives a memory warning notification.
private let cache = LRUCache<String, LottieAnimation>()
}
// MARK: Sendable
// LottieAnimationCache has a Sendable requirement, but we can't
// redesign DefaultAnimationCache to be properly Sendable without
// making breaking changes.
// swiftlint:disable:next no_unchecked_sendable
extension DefaultAnimationCache: @unchecked Sendable { }