From 744980974364f49efdf70c3a5b41a26c3ef73690 Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Mon, 23 Nov 2015 13:00:35 -0800 Subject: [PATCH 1/3] ASMultiplexImageNode: Use ASObjectIsEqual when comparing identifiers. --- AsyncDisplayKit/ASMultiplexImageNode.mm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/AsyncDisplayKit/ASMultiplexImageNode.mm b/AsyncDisplayKit/ASMultiplexImageNode.mm index c5c3edd793..a5491ba195 100644 --- a/AsyncDisplayKit/ASMultiplexImageNode.mm +++ b/AsyncDisplayKit/ASMultiplexImageNode.mm @@ -19,6 +19,7 @@ #import "ASDisplayNode+Subclasses.h" #import "ASLog.h" #import "ASPhotosFrameworkImageRequest.h" +#import "ASEqualityHelpers.h" #if !AS_IOS8_SDK_OR_LATER #error ASMultiplexImageNode can be used on iOS 7, but must be linked against the iOS 8 SDK. @@ -308,7 +309,7 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent #pragma mark - Core Internal - (void)_setDisplayedImageIdentifier:(id)displayedImageIdentifier withImage:(UIImage *)image { - if (_displayedImageIdentifier == displayedImageIdentifier) + if (ASObjectIsEqual(displayedImageIdentifier, _displayedImageIdentifier)) return; _displayedImageIdentifier = [displayedImageIdentifier copy]; @@ -332,7 +333,7 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent - (void)_setDownloadIdentifier:(id)downloadIdentifier { - if (_downloadIdentifier == downloadIdentifier) + if (ASObjectIsEqual(downloadIdentifier, _downloadIdentifier)) return; [_downloader cancelImageDownloadForIdentifier:_downloadIdentifier]; From 93e5f905e85731810696a2288f4aaaa201556bac Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Mon, 23 Nov 2015 13:04:43 -0800 Subject: [PATCH 2/3] Always use _setDownloadIdentifier: --- AsyncDisplayKit/ASMultiplexImageNode.mm | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/AsyncDisplayKit/ASMultiplexImageNode.mm b/AsyncDisplayKit/ASMultiplexImageNode.mm index a5491ba195..ff1e07c885 100644 --- a/AsyncDisplayKit/ASMultiplexImageNode.mm +++ b/AsyncDisplayKit/ASMultiplexImageNode.mm @@ -184,10 +184,7 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent [_phImageRequestOperation cancel]; - if (_downloadIdentifier) { - [_downloader cancelImageDownloadForIdentifier:_downloadIdentifier]; - _downloadIdentifier = nil; - } + [self _setDownloadIdentifier:nil]; } - (void)clearFetchedData @@ -197,12 +194,9 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent if ([self _shouldClearFetchedImageData]) { [_phImageRequestOperation cancel]; - - if (_downloadIdentifier) { - [_downloader cancelImageDownloadForIdentifier:_downloadIdentifier]; - _downloadIdentifier = nil; - } - + + [self _setDownloadIdentifier:nil]; + // setting this to nil makes the node fetch images the next time its display starts _loadedImageIdentifier = nil; self.image = nil; From 2771ce875e2e9283cc5abe7ad0335f172e306ae2 Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Mon, 23 Nov 2015 13:08:56 -0800 Subject: [PATCH 3/3] Everyone gets an ASObjectIsEqual!! --- AsyncDisplayKit/ASMultiplexImageNode.mm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AsyncDisplayKit/ASMultiplexImageNode.mm b/AsyncDisplayKit/ASMultiplexImageNode.mm index ff1e07c885..a29ec6d454 100644 --- a/AsyncDisplayKit/ASMultiplexImageNode.mm +++ b/AsyncDisplayKit/ASMultiplexImageNode.mm @@ -217,7 +217,7 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent // We may now be displaying the loaded identifier, if they're different. UIImage *displayedImage = self.image; if (displayedImage) { - if (![_displayedImageIdentifier isEqual:_loadedImageIdentifier]) + if (!ASObjectIsEqual(_displayedImageIdentifier, _loadedImageIdentifier)) [self _setDisplayedImageIdentifier:_loadedImageIdentifier withImage:displayedImage]; // Delegateify @@ -281,7 +281,7 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent { OSSpinLockLock(&_imageIdentifiersLock); - if ([_imageIdentifiers isEqual:imageIdentifiers]) { + if (ASObjectIsEqual(_imageIdentifiers, imageIdentifiers)) { OSSpinLockUnlock(&_imageIdentifiersLock); return; } @@ -386,7 +386,7 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent // If we've already loaded the best identifier, we've got nothing else to do. id bestImageIdentifier = _imageIdentifiers.firstObject; - if (!bestImageIdentifier || [_loadedImageIdentifier isEqual:bestImageIdentifier]) { + if (!bestImageIdentifier || ASObjectIsEqual(_loadedImageIdentifier, bestImageIdentifier)) { OSSpinLockUnlock(&_imageIdentifiersLock); return nil; } @@ -434,7 +434,7 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent return; // Only nil out the loading identifier if the loading identifier hasn't changed. - if ([strongSelf.loadingImageIdentifier isEqual:nextImageIdentifier]) { + if (ASObjectIsEqual(strongSelf.loadingImageIdentifier, nextImageIdentifier)) { strongSelf.loadingImageIdentifier = nil; } [strongSelf _finishedLoadingImage:image forIdentifier:imageIdentifier error:error]; @@ -491,7 +491,7 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent } // If the next image to load has changed, bail. - if (![[strongSelf _nextImageIdentifierToDownload] isEqual:nextImageIdentifier]) { + if (!ASObjectIsEqual([strongSelf _nextImageIdentifierToDownload], nextImageIdentifier)) { finishedLoadingBlock(nil, nil, [NSError errorWithDomain:ASMultiplexImageNodeErrorDomain code:ASMultiplexImageNodeErrorCodeBestImageIdentifierChanged userInfo:nil]); return; }