From cf1e4c87f56acf287b806428df1c228ea0cad61e Mon Sep 17 00:00:00 2001 From: Garrett Moon Date: Fri, 12 Feb 2016 15:04:14 -0800 Subject: [PATCH 1/2] Add image loading delegate method / cache instead of respondsToSelector --- AsyncDisplayKit/ASNetworkImageNode.h | 9 ++++++++ AsyncDisplayKit/ASNetworkImageNode.mm | 32 ++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/AsyncDisplayKit/ASNetworkImageNode.h b/AsyncDisplayKit/ASNetworkImageNode.h index 82513a8c55..0579b0351a 100644 --- a/AsyncDisplayKit/ASNetworkImageNode.h +++ b/AsyncDisplayKit/ASNetworkImageNode.h @@ -95,6 +95,15 @@ NS_ASSUME_NONNULL_BEGIN @optional +/** + * Notification that the image node started to load + * + * @param imageNode The sender. + * + * @discussion Called on a background queue. + */ +- (void)imageNodeDidStartLoading:(ASNetworkImageNode *)imageNode; + /** * Notification that the image node failed to download the image. * diff --git a/AsyncDisplayKit/ASNetworkImageNode.mm b/AsyncDisplayKit/ASNetworkImageNode.mm index debeab01f7..6c152dd06b 100755 --- a/AsyncDisplayKit/ASNetworkImageNode.mm +++ b/AsyncDisplayKit/ASNetworkImageNode.mm @@ -35,10 +35,15 @@ BOOL _imageLoaded; + BOOL _delegateSupportsDidStartLoading; + BOOL _delegateSupportsDidFailWithError; + BOOL _delegateSupportsImageNodeDidFinishDecoding; + //set on init only BOOL _downloaderSupportsNewProtocol; BOOL _downloaderImplementsSetProgress; BOOL _downloaderImplementsSetPriority; + BOOL _cacheSupportsNewProtocol; BOOL _cacheSupportsClearing; } @@ -144,6 +149,10 @@ { ASDN::MutexLocker l(_lock); _delegate = delegate; + + _delegateSupportsDidStartLoading = [delegate respondsToSelector:@selector(imageNodeDidStartLoading:)]; + _delegateSupportsDidFailWithError = [delegate respondsToSelector:@selector(imageNode:didFailWithError:)]; + _delegateSupportsImageNodeDidFinishDecoding = [delegate respondsToSelector:@selector(imageNodeDidFinishDecoding:)]; } - (id)delegate @@ -278,6 +287,13 @@ - (void)_lazilyLoadImageIfNecessary { if (!_imageLoaded && _URL != nil && _downloadIdentifier == nil) { + { + ASDN::MutexLocker l(_lock); + if (_delegateSupportsDidStartLoading) { + [_delegate imageNodeDidStartLoading:self]; + } + } + if (_URL.isFileURL) { { ASDN::MutexLocker l(_lock); @@ -329,11 +345,14 @@ strongSelf->_cacheUUID = nil; } - if (responseImage != NULL) { - [strongSelf->_delegate imageNode:strongSelf didLoadImage:strongSelf.image]; - } - else if (error && [strongSelf->_delegate respondsToSelector:@selector(imageNode:didFailWithError:)]) { - [strongSelf->_delegate imageNode:strongSelf didFailWithError:error]; + { + ASDN::MutexLocker l(strongSelf->_lock); + if (responseImage != NULL) { + [strongSelf->_delegate imageNode:strongSelf didLoadImage:strongSelf.image]; + } + else if (error && _delegateSupportsDidFailWithError) { + [strongSelf->_delegate imageNode:strongSelf didFailWithError:error]; + } } }; @@ -377,7 +396,8 @@ - (void)asyncdisplaykit_asyncTransactionContainerStateDidChange { if (self.asyncdisplaykit_asyncTransactionContainerState == ASAsyncTransactionContainerStateNoTransactions) { - if (self.layer.contents != nil && [self.delegate respondsToSelector:@selector(imageNodeDidFinishDecoding:)]) { + ASDN::MutexLocker l(_lock); + if (self.layer.contents != nil && _delegateSupportsImageNodeDidFinishDecoding) { [self.delegate imageNodeDidFinishDecoding:self]; } } From 7d80fb31bd2f97c6f795697a721f78623d63fdc8 Mon Sep 17 00:00:00 2001 From: Garrett Moon Date: Fri, 12 Feb 2016 15:10:58 -0800 Subject: [PATCH 2/2] rename imageNodeDidStartLoading to imageNodeDidStartFetchingData --- AsyncDisplayKit/ASNetworkImageNode.h | 2 +- AsyncDisplayKit/ASNetworkImageNode.mm | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AsyncDisplayKit/ASNetworkImageNode.h b/AsyncDisplayKit/ASNetworkImageNode.h index 0579b0351a..79070aaccc 100644 --- a/AsyncDisplayKit/ASNetworkImageNode.h +++ b/AsyncDisplayKit/ASNetworkImageNode.h @@ -102,7 +102,7 @@ NS_ASSUME_NONNULL_BEGIN * * @discussion Called on a background queue. */ -- (void)imageNodeDidStartLoading:(ASNetworkImageNode *)imageNode; +- (void)imageNodeDidStartFetchingData:(ASNetworkImageNode *)imageNode; /** * Notification that the image node failed to download the image. diff --git a/AsyncDisplayKit/ASNetworkImageNode.mm b/AsyncDisplayKit/ASNetworkImageNode.mm index 6c152dd06b..3b5eb75db9 100755 --- a/AsyncDisplayKit/ASNetworkImageNode.mm +++ b/AsyncDisplayKit/ASNetworkImageNode.mm @@ -35,7 +35,7 @@ BOOL _imageLoaded; - BOOL _delegateSupportsDidStartLoading; + BOOL _delegateSupportsDidStartFetchingData; BOOL _delegateSupportsDidFailWithError; BOOL _delegateSupportsImageNodeDidFinishDecoding; @@ -150,7 +150,7 @@ ASDN::MutexLocker l(_lock); _delegate = delegate; - _delegateSupportsDidStartLoading = [delegate respondsToSelector:@selector(imageNodeDidStartLoading:)]; + _delegateSupportsDidStartFetchingData = [delegate respondsToSelector:@selector(imageNodeDidStartFetchingData:)]; _delegateSupportsDidFailWithError = [delegate respondsToSelector:@selector(imageNode:didFailWithError:)]; _delegateSupportsImageNodeDidFinishDecoding = [delegate respondsToSelector:@selector(imageNodeDidFinishDecoding:)]; } @@ -289,8 +289,8 @@ if (!_imageLoaded && _URL != nil && _downloadIdentifier == nil) { { ASDN::MutexLocker l(_lock); - if (_delegateSupportsDidStartLoading) { - [_delegate imageNodeDidStartLoading:self]; + if (_delegateSupportsDidStartFetchingData) { + [_delegate imageNodeDidStartFetchingData:self]; } }