Forráskód Böngészése

Update default disk cleaning method to use content access date.

This is possibly controversial, but I suspect most clients of SDWebImage would prefer files purged based on their last time of use instead of the date when they were downloaded.
Tim Johnsen 1 éve
szülő
commit
e524ca0310

+ 3 - 4
SDWebImage/Core/SDDiskCache.m

@@ -152,11 +152,8 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
     NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
     
     // Compute content date key to be used for tests
-    NSURLResourceKey cacheContentDateKey = NSURLContentModificationDateKey;
+    NSURLResourceKey cacheContentDateKey;
     switch (self.config.diskCacheExpireType) {
-        case SDImageCacheConfigExpireTypeAccessDate:
-            cacheContentDateKey = NSURLContentAccessDateKey;
-            break;
         case SDImageCacheConfigExpireTypeModificationDate:
             cacheContentDateKey = NSURLContentModificationDateKey;
             break;
@@ -166,7 +163,9 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
         case SDImageCacheConfigExpireTypeChangeDate:
             cacheContentDateKey = NSURLAttributeModificationDateKey;
             break;
+        case SDImageCacheConfigExpireTypeAccessDate:
         default:
+            cacheContentDateKey = NSURLContentAccessDateKey;
             break;
     }
     

+ 1 - 1
SDWebImage/Core/SDImageCacheConfig.h

@@ -115,7 +115,7 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) {
 
 /*
  * The attribute which the clear cache will be checked against when clearing the disk cache
- * Default is Modified Date
+ * Default is Access Date
  */
 @property (assign, nonatomic) SDImageCacheConfigExpireType diskCacheExpireType;
 

+ 1 - 1
SDWebImage/Core/SDImageCacheConfig.m

@@ -34,7 +34,7 @@ static const NSInteger kDefaultCacheMaxDiskAge = 60 * 60 * 24 * 7; // 1 week
         _diskCacheWritingOptions = NSDataWritingAtomic;
         _maxDiskAge = kDefaultCacheMaxDiskAge;
         _maxDiskSize = 0;
-        _diskCacheExpireType = SDImageCacheConfigExpireTypeModificationDate;
+        _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

+ 3 - 3
Tests/Tests/SDWebImageTestCache.m

@@ -91,7 +91,7 @@ static NSString * const SDWebImageTestDiskCacheExtendedAttributeName = @"com.hac
 - (void)removeExpiredData {
     NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.config.maxDiskAge];
     NSURL *diskCacheURL = [NSURL fileURLWithPath:self.cachePath isDirectory:YES];
-    NSArray<NSString *> *resourceKeys = @[NSURLIsDirectoryKey, NSURLAttributeModificationDateKey];
+    NSArray<NSString *> *resourceKeys = @[NSURLIsDirectoryKey, NSURLAttributeContentAccessDateKey];
     NSDirectoryEnumerator<NSURL *> *fileEnumerator = [self.fileManager enumeratorAtURL:diskCacheURL
                                                    includingPropertiesForKeys:resourceKeys
                                                                       options:NSDirectoryEnumerationSkipsHiddenFiles
@@ -108,8 +108,8 @@ static NSString * const SDWebImageTestDiskCacheExtendedAttributeName = @"com.hac
             }
             
             // Remove files that are older than the expiration date;
-            NSDate *modifiedDate = resourceValues[NSURLAttributeModificationDateKey];
-            if (expirationDate && [[modifiedDate laterDate:expirationDate] isEqualToDate:expirationDate]) {
+            NSDate *accessDate = resourceValues[NSURLAttributeContentAccessDateKey];
+            if (expirationDate && [[accessDate laterDate:expirationDate] isEqualToDate:expirationDate]) {
                 [self.fileManager removeItemAtURL:fileURL error:nil];
             }
         }