diff --git a/PINCache/PINDiskCache.m b/PINCache/PINDiskCache.m index 0e22e3b6..c1a9a827 100644 --- a/PINCache/PINDiskCache.m +++ b/PINCache/PINDiskCache.m @@ -675,6 +675,10 @@ - (void)setObject:(id )object forKey:(NSString *)key fileURL:(NSURL ** NSNumber *diskFileSize = [values objectForKey:NSURLTotalFileAllocatedSizeKey]; if (diskFileSize) { + NSNumber *prevDiskFileSize = [self->_sizes objectForKey:key]; + if (prevDiskFileSize) { + self.byteCount = self->_byteCount - [prevDiskFileSize unsignedIntegerValue]; + } [self->_sizes setObject:diskFileSize forKey:key]; self.byteCount = self->_byteCount + [diskFileSize unsignedIntegerValue]; // atomic } diff --git a/tests/PINCacheTests/PINCacheTests.m b/tests/PINCacheTests/PINCacheTests.m index 0070ca1b..e9672bbf 100644 --- a/tests/PINCacheTests/PINCacheTests.m +++ b/tests/PINCacheTests/PINCacheTests.m @@ -241,6 +241,19 @@ - (void)testDiskByteCount XCTAssertTrue(self.cache.diskByteCount > 0, @"disk cache byte count was not greater than zero"); } +- (void)testDiskByteCountWithExistingKey +{ + [self.cache setObject:[self image] forKey:@"image"]; + NSUInteger initialDiskByteCount = self.cache.diskByteCount; + [self.cache setObject:[self image] forKey:@"image"]; + + XCTAssertTrue(self.cache.diskByteCount == initialDiskByteCount, @"disk cache byte count should not change by adding object with existing key and size"); + + [self.cache setObject:[self image] forKey:@"image2"]; + + XCTAssertTrue(self.cache.diskByteCount > initialDiskByteCount, @"disk cache byte count should increase with new key and object added to disk cache"); +} + - (void)testOneThousandAndOneWrites { NSUInteger max = 1001;