/* * This file is part of the SDWebImage package. * (c) Olivier Poitrey * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ #import "SDImageCacheConfig.h" #import "SDMemoryCache.h" #import "SDDiskCache.h" static SDImageCacheConfig *_defaultCacheConfig; static const NSInteger kDefaultCacheMaxDiskAge = 60 * 60 * 24 * 7; // 1 week @implementation SDImageCacheConfig + (SDImageCacheConfig *)defaultCacheConfig { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _defaultCacheConfig = [SDImageCacheConfig new]; }); return _defaultCacheConfig; } - (instancetype)init { if (self = [super init]) { _shouldDisableiCloud = YES; _shouldCacheImagesInMemory = YES; _shouldUseWeakMemoryCache = NO; _shouldRemoveExpiredDataWhenEnterBackground = YES; _shouldRemoveExpiredDataWhenTerminate = YES; _diskCacheReadingOptions = 0; _diskCacheWritingOptions = NSDataWritingAtomic; _maxDiskAge = kDefaultCacheMaxDiskAge; _maxDiskSize = 0; _diskCacheExpireType = SDImageCacheConfigExpireTypeAccessDate; _fileManager = nil; if (@available(iOS 10.0, tvOS 10.0, macOS 10.12, watchOS 3.0, *)) { _ioQueueAttributes = DISPATCH_QUEUE_SERIAL_WITH_AUTORELEASE_POOL; // DISPATCH_AUTORELEASE_FREQUENCY_WORK_ITEM } else { _ioQueueAttributes = DISPATCH_QUEUE_SERIAL; // NULL } _memoryCacheClass = [SDMemoryCache class]; _diskCacheClass = [SDDiskCache class]; } return self; } - (id)copyWithZone:(NSZone *)zone { SDImageCacheConfig *config = [[[self class] allocWithZone:zone] init]; config.shouldDisableiCloud = self.shouldDisableiCloud; config.shouldCacheImagesInMemory = self.shouldCacheImagesInMemory; config.shouldUseWeakMemoryCache = self.shouldUseWeakMemoryCache; config.shouldRemoveExpiredDataWhenEnterBackground = self.shouldRemoveExpiredDataWhenEnterBackground; config.shouldRemoveExpiredDataWhenTerminate = self.shouldRemoveExpiredDataWhenTerminate; config.diskCacheReadingOptions = self.diskCacheReadingOptions; config.diskCacheWritingOptions = self.diskCacheWritingOptions; config.maxDiskAge = self.maxDiskAge; config.maxDiskSize = self.maxDiskSize; config.maxMemoryCost = self.maxMemoryCost; config.maxMemoryCount = self.maxMemoryCount; config.diskCacheExpireType = self.diskCacheExpireType; config.fileManager = self.fileManager; // NSFileManager does not conform to NSCopying, just pass the reference config.ioQueueAttributes = self.ioQueueAttributes; // Pass the reference config.memoryCacheClass = self.memoryCacheClass; config.diskCacheClass = self.diskCacheClass; return config; } @end