Fixed a concurrent modification error in caching app images

This commit is contained in:
Diego Waxemberg
2015-01-09 15:17:19 -05:00
parent afb7e930ee
commit 9e054973c8
+4
View File
@@ -50,21 +50,25 @@
- (void) retrieveAssetForApp:(App*)app useCache:(BOOL)useCache { - (void) retrieveAssetForApp:(App*)app useCache:(BOOL)useCache {
UIImage* appImage = nil; UIImage* appImage = nil;
if (useCache) { if (useCache) {
@synchronized(_imageCache) {
UIImage* cachedImage = [_imageCache objectForKey:app.appId]; UIImage* cachedImage = [_imageCache objectForKey:app.appId];
if (cachedImage != nil) { if (cachedImage != nil) {
appImage = cachedImage; appImage = cachedImage;
app.appImage = appImage; app.appImage = appImage;
} }
} }
}
if (appImage == nil) { if (appImage == nil) {
HttpManager* hMan = [[HttpManager alloc] initWithHost:_host.address uniqueId:_uniqueId deviceName:deviceName cert:_cert]; HttpManager* hMan = [[HttpManager alloc] initWithHost:_host.address uniqueId:_uniqueId deviceName:deviceName cert:_cert];
NSData* appAsset = [hMan executeRequestSynchronously:[hMan newAppAssetRequestWithAppId:app.appId]]; NSData* appAsset = [hMan executeRequestSynchronously:[hMan newAppAssetRequestWithAppId:app.appId]];
appImage = [UIImage imageWithData:appAsset]; appImage = [UIImage imageWithData:appAsset];
app.appImage = appImage; app.appImage = appImage;
if (appImage != nil) { if (appImage != nil) {
@synchronized(_imageCache) {
[_imageCache setObject:appImage forKey:app.appId]; [_imageCache setObject:appImage forKey:app.appId];
} }
} }
}
[self performSelectorOnMainThread:@selector(sendCallBackForApp:) withObject:app waitUntilDone:NO]; [self performSelectorOnMainThread:@selector(sendCallBackForApp:) withObject:app waitUntilDone:NO];
} }