From 253692df65caf0d767ba4e98c6ee6a11d6790396 Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Fri, 6 May 2016 21:45:31 -0700 Subject: [PATCH] [ASMultiplexImageNode] Do not request already-loaded images from data source to avoid loop --- AsyncDisplayKit/ASMultiplexImageNode.mm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/AsyncDisplayKit/ASMultiplexImageNode.mm b/AsyncDisplayKit/ASMultiplexImageNode.mm index cb83bb1156..2af4f1836e 100644 --- a/AsyncDisplayKit/ASMultiplexImageNode.mm +++ b/AsyncDisplayKit/ASMultiplexImageNode.mm @@ -436,8 +436,12 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent } // Grab the best available image from the data source. + UIImage *existingImage = self.image; for (id imageIdentifier in _imageIdentifiers) { - UIImage *image = [_dataSource multiplexImageNode:self imageForImageIdentifier:imageIdentifier]; + // If this image is already loaded, don't request it from the data source again because + // the data source may generate a new instance of UIImage that returns NO for isEqual: + // and we'll end up in an infinite loading loop. + UIImage *image = ASObjectIsEqual(imageIdentifier, _loadedImageIdentifier) ? existingImage : [_dataSource multiplexImageNode:self imageForImageIdentifier:imageIdentifier]; if (image) { if (imageIdentifierOut) { *imageIdentifierOut = imageIdentifier;