Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.

Commit 8009b9d

Browse files
maickigarrettmoon
authored andcommitted
Further work
1 parent e429d80 commit 8009b9d

1 file changed

Lines changed: 16 additions & 29 deletions

File tree

AsyncDisplayKit/ASNetworkImageNode.mm

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -121,31 +121,19 @@ - (void)dealloc
121121

122122
/// Setter for public image property. It has the side effect to set an internal _imageWasSetExternally that prevents setting an image internally. Setting an image internally should happen with the _setImage: method
123123
- (void)setImage:(UIImage *)image
124-
{
125-
__instanceLock__.lock();
126-
_imageWasSetExternally = (image != nil);
127-
if (_imageWasSetExternally) {
128-
[self __cancelDownloadAndClearImage];
129-
}
130-
__instanceLock__.unlock();
131-
132-
[self __setImage:image];
133-
}
134-
135-
/// Internal image setter that will first check if an image already was set externally and will return otherwise will set it
136-
- (void)_setImage:(UIImage *)image
137124
{
138125
__instanceLock__.lock();
139126

140127
#ifdef DEBUG
141128
if (_URL != nil) {
142-
NSLog(@"Setting the image directly on an %@ and setting an URL is not supported. If you decide to set an image direclty this node will work the same ways as an plain ASImageNode and not consider the image loaded via URL.", NSStringFromClass([self class]));
129+
NSLog(@"Setting the image directly on an %@ and setting and setting an URL is not supported. If you want to use a placeholder image please use defaultImage .", NSStringFromClass([self class]));
143130
}
144131
#endif
145132

133+
_imageWasSetExternally = (image != nil);
146134
if (_imageWasSetExternally) {
147-
__instanceLock__.unlock();
148-
return;
135+
[self __cancelDownloadAndClearImage];
136+
_URL = nil;
149137
}
150138
__instanceLock__.unlock();
151139

@@ -163,11 +151,12 @@ - (void)setURL:(NSURL *)URL resetToDefault:(BOOL)reset
163151

164152
#ifdef DEBUG
165153
if (_imageWasSetExternally) {
166-
NSLog(@"Setting the image directly on an %@ and setting an URL is not supported. If you decide to set an image direclty this node will work the same ways as an plain ASImageNode and not consider the image loaded via URL.", NSStringFromClass([self class]));
154+
NSLog(@"Setting the image directly on an %@ and setting and setting an URL is not supported. If you want to use a placeholder image please use defaultImage .", NSStringFromClass([self class]));
167155
}
168156
#endif
157+
_imageWasSetExternally = NO;
169158

170-
if (ASObjectIsEqual(URL, _URL) || _imageWasSetExternally) {
159+
if (ASObjectIsEqual(URL, _URL)) {
171160
return;
172161
}
173162

@@ -178,7 +167,7 @@ - (void)setURL:(NSURL *)URL resetToDefault:(BOOL)reset
178167

179168
BOOL hasURL = _URL == nil;
180169
if (reset || hasURL) {
181-
[self _setImage:_defaultImage];
170+
[self __setImage:_defaultImage];
182171
/* We want to maintain the order that currentImageQuality is set regardless of the calling thread,
183172
so always use a dispatch_async to ensure that we queue the operations in the correct order.
184173
(see comment in displayDidFinish) */
@@ -213,7 +202,7 @@ - (void)setDefaultImage:(UIImage *)defaultImage
213202
dispatch_async(dispatch_get_main_queue(), ^{
214203
self.currentImageQuality = hasURL ? 0.0 : 1.0;
215204
});
216-
[self _setImage:defaultImage];
205+
[self __setImage:defaultImage];
217206
}
218207
}
219208

@@ -298,7 +287,7 @@ - (void)displayWillStartAsynchronously:(BOOL)asynchronously
298287
if (_imageLoaded == NO && _URL && _downloadIdentifier == nil) {
299288
UIImage *result = [[_cache synchronouslyFetchedCachedImageWithURL:_URL] asdk_image];
300289
if (result) {
301-
[self _setImage:result];
290+
[self __setImage:result];
302291
_imageLoaded = YES;
303292
dispatch_async(dispatch_get_main_queue(), ^{
304293
_currentImageQuality = 1.0;
@@ -370,9 +359,7 @@ - (void)didEnterPreloadState
370359
{
371360
ASDN::MutexLocker l(__instanceLock__);
372361
// Image was set externally no need to load an image
373-
if (_imageWasSetExternally == NO) {
374-
[self _lazilyLoadImageIfNecessary];
375-
}
362+
[self _lazilyLoadImageIfNecessary];
376363
}
377364
}
378365

@@ -385,7 +372,7 @@ - (void)handleProgressImage:(UIImage *)progressImage progress:(CGFloat)progress
385372
if (ASObjectIsEqual(_downloadIdentifier, downloadIdentifier) == NO && downloadIdentifier != nil) {
386373
return;
387374
}
388-
[self _setImage:progressImage];
375+
[self __setImage:progressImage];
389376
dispatch_async(dispatch_get_main_queue(), ^{
390377
// See comment in -displayDidFinish for why this must be dispatched to main
391378
self.currentImageQuality = progress;
@@ -450,7 +437,7 @@ - (void)_clearImage
450437
ASPerformBackgroundDeallocation(image);
451438
}
452439
self.animatedImage = nil;
453-
[self _setImage:_defaultImage];
440+
[self __setImage:_defaultImage];
454441
_imageLoaded = NO;
455442
// See comment in -displayDidFinish for why this must be dispatched to main
456443
dispatch_async(dispatch_get_main_queue(), ^{
@@ -510,7 +497,7 @@ - (void)_lazilyLoadImageIfNecessary
510497

511498
dispatch_async(dispatch_get_main_queue(), ^{
512499
if (self.shouldCacheImage) {
513-
[self _setImage:[UIImage imageNamed:_URL.path.lastPathComponent]];
500+
[self __setImage:[UIImage imageNamed:_URL.path.lastPathComponent]];
514501
} else {
515502
// First try to load the path directly, for efficiency assuming a developer who
516503
// doesn't want caching is trying to be as minimal as possible.
@@ -540,7 +527,7 @@ - (void)_lazilyLoadImageIfNecessary
540527
if (animatedImage != nil) {
541528
self.animatedImage = animatedImage;
542529
} else {
543-
[self _setImage:nonAnimatedImage];
530+
[self __setImage:nonAnimatedImage];
544531
}
545532
}
546533

@@ -576,7 +563,7 @@ - (void)_lazilyLoadImageIfNecessary
576563
if ([imageContainer asdk_animatedImageData] && _downloaderFlags.downloaderImplementsAnimatedImage) {
577564
strongSelf.animatedImage = [_downloader animatedImageWithData:[imageContainer asdk_animatedImageData]];
578565
} else {
579-
[strongSelf _setImage:[imageContainer asdk_image]];
566+
[strongSelf __setImage:[imageContainer asdk_image]];
580567
}
581568
dispatch_async(dispatch_get_main_queue(), ^{
582569
strongSelf->_currentImageQuality = 1.0;

0 commit comments

Comments
 (0)