MemoryUsageLimitation
public struct MemoryUsageLimitation
                A high-performance, in-memory key-value cache with configurable thread safety and memory management.
Core Features
- TTL (Time-to-Live) Expiration: Automatic cleanup of expired entries
 - Priority-Based Eviction: Higher priority entries are retained longer during eviction
 - LRU (Least Recently Used) Eviction: Within priority levels, least recently used entries are evicted first
 - Null Element Caching: Support for caching null/nil elements with separate TTL configuration
 - External Key Validation: Customizable key validation function set at initialization
 - TTL Randomization: Prevents cache stampede by randomizing expiration times
 - Configurable Thread Safety: Optional DispatchSemaphore synchronization for concurrent access
 - Memory Usage Tracking: Configurable memory limits with automatic eviction
 
Thread Safety
- Synchronized Mode (
enableThreadSynchronization=true): All operations are thread-safe using DispatchSemaphore - Non-Synchronized Mode (
enableThreadSynchronization=false): No synchronization; caller must ensure thread safety 
Performance Characteristics
- Time Complexity: O(1) average case for get/set operations
 - Memory Efficiency: Configurable capacity and memory limits
 - Automatic Expiration: Background cleanup of expired entries
 - Eviction Policy: Priority-based LRU eviction with memory limit enforcement
 
Example Usage
// Thread-synchronized cache with custom validation and memory limits
let imageCache = MemoryCache<String, UIImage>(
    configuration: .init(
        enableThreadSynchronization: true,
        memoryUsageLimitation: .init(capacity: 1000, memory: 500), // 500MB limit
        defaultTTL: 3600, // 1 hour
        keyValidator: { $0.hasPrefix("https://") },
        costProvider: { image in
            guard let cgImage = image.cgImage else { return 0 }
            return cgImage.bytesPerRow * cgImage.height // Returns bytes
        }
    )
)
// Non-synchronized cache for single-threaded scenarios
let fastCache = MemoryCache<String, Int>(
    configuration: .init(
        enableThreadSynchronization: false,
        memoryUsageLimitation: .init(capacity: 500, memory: 100)
    )
)
          - 
                  
                  
Maximum memory usage allowed (in MB).
Declaration
Swift
public static let unlimitedMemoryUsage: Int - 
                  
                  
Maximum number of items allowed in the cache.
Declaration
Swift
public let capacity: Int - 
                  
                  
Maximum memory usage allowed (in MB).
Declaration
Swift
public let memory: Int - 
                  
                  
Creates a new usage limitation with specified constraints.
Declaration
Swift
public init(capacity: Int = 1024, memory: Int = Self.unlimitedMemoryUsage)Parameters
capacityMaximum number of items (default: 1024)
memoryMaximum memory usage in MB (default: unlimited)
 
View on GitHub