diff --git a/SDWebImage/SDImageCache.m b/SDWebImage/SDImageCache.m index b558e3528..8a5bc6116 100644 --- a/SDWebImage/SDImageCache.m +++ b/SDWebImage/SDImageCache.m @@ -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]; } } });