// // HttpdnsHostObjectInMemoryCache.h // TrustHttpDNS // // Created by xuyecan on 2024/9/28. // Copyright © 2024 trustapp.com. All rights reserved. // #import #import "HttpdnsHostObject.h" NS_ASSUME_NONNULL_BEGIN // 这个字典在HTTPDNS中只用于存储HttpdnsHostObject对象,这个对象是整个框架的核心对象,用于缓存和处理域名解析结? // 通常从缓存中获得这个对象之后,会根据不同场景改变一些字段的值,而且很可能发生在不同线程? // 而不同线程从缓存中直接读取共享对象的话,很有可能发生线程竞争的情况,多线程访问某个对象的同一个字段,在swift环境有较高概率发生crash // 因此,除了确保字典操作的线程安全,拿出对象的时候,也直接copy一个复制对象返?HttpdnsHostObject对象实现了NSCopying协议) @interface HttpdnsHostObjectInMemoryCache : NSObject - (void)setHostObject:(HttpdnsHostObject *)object forCacheKey:(NSString *)key; - (HttpdnsHostObject *)getHostObjectByCacheKey:(NSString *)key; - (HttpdnsHostObject *)getHostObjectByCacheKey:(NSString *)key createIfNotExists:(HttpdnsHostObject *(^)(void))objectProducer; - (void)updateQualityForCacheKey:(NSString *)key forIp:(NSString *)ip withConnectedRT:(NSInteger)connectedRT; - (void)removeHostObjectByCacheKey:(NSString *)key; - (void)removeAllHostObjects; - (NSInteger)count; - (NSArray *)allCacheKeys; @end NS_ASSUME_NONNULL_END