Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Prefetching file properties in the disk cleaning enumerator

  • Loading branch information...
commit fbf14d2e163eb9a8c27bdc8983ae51a2514db977 1 parent ae57215
Nebil Kriedi nebillo authored
Showing with 21 additions and 6 deletions.
  1. +21 −6 SDWebImage/SDImageCache.m
27 SDWebImage/SDImageCache.m
View
@@ -256,14 +256,29 @@ - (void)cleanDisk
dispatch_async(self.ioQueue, ^
{
NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.maxCacheAge];
- NSDirectoryEnumerator *fileEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:self.diskCachePath];
- for (NSString *fileName in fileEnumerator)
+ // convert NSString path to NSURL path
+ NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
+ // build an enumerator by also prefetching file properties we want to read
+ NSDirectoryEnumerator *fileEnumerator = [[NSFileManager defaultManager] enumeratorAtURL:diskCacheURL
+ includingPropertiesForKeys:@[ NSURLIsDirectoryKey, NSURLContentModificationDateKey ]
+ options:NSDirectoryEnumerationSkipsHiddenFiles
+ errorHandler:NULL];
+ for (NSURL *fileURL in fileEnumerator)
{
- NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
- NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
- if ([[[attrs fileModificationDate] laterDate:expirationDate] isEqualToDate:expirationDate])
+ // skip folder
+ NSNumber *isDirectory;
+ [fileURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:NULL];
+ if ([isDirectory boolValue])
{
- [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
+ continue;
+ }
+
+ // compare file date with the max age
+ NSDate *fileModificationDate;
+ [fileURL getResourceValue:&fileModificationDate forKey:NSURLContentModificationDateKey error:NULL];
+ if ([[fileModificationDate laterDate:expirationDate] isEqualToDate:expirationDate])
+ {
+ [[NSFileManager defaultManager] removeItemAtURL:fileURL error:nil];
}
}
});
Please sign in to comment.
Something went wrong with that request. Please try again.