From 03156dceb6c4376c2161c8fdc95ebc67bae4972e Mon Sep 17 00:00:00 2001 From: Nadine Salter Date: Fri, 21 Nov 2014 14:01:23 -0800 Subject: [PATCH] ASNetworkImageNode ARC fixes. --- AsyncDisplayKit/ASNetworkImageNode.h | 6 +++--- AsyncDisplayKit/ASNetworkImageNode.mm | 22 ++++++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/AsyncDisplayKit/ASNetworkImageNode.h b/AsyncDisplayKit/ASNetworkImageNode.h index 36425abd25..59a74ec7c3 100644 --- a/AsyncDisplayKit/ASNetworkImageNode.h +++ b/AsyncDisplayKit/ASNetworkImageNode.h @@ -37,19 +37,19 @@ /** * The delegate, which must conform to the protocol. */ -@property (atomic, assign, readwrite) id delegate; +@property (atomic, weak, readwrite) id delegate; /** * A placeholder image to display while the URL is loading. */ -@property (atomic, retain, readwrite) UIImage *defaultImage; +@property (atomic, strong, readwrite) UIImage *defaultImage; /** * The URL of a new image to download and display. * * @discussion Changing this property will reset the displayed image to a placeholder () while loading. */ -@property (atomic, retain, readwrite) NSURL *URL; +@property (atomic, strong, readwrite) NSURL *URL; /** * Download and display a new image. diff --git a/AsyncDisplayKit/ASNetworkImageNode.mm b/AsyncDisplayKit/ASNetworkImageNode.mm index bed2e86750..afc4d2b672 100644 --- a/AsyncDisplayKit/ASNetworkImageNode.mm +++ b/AsyncDisplayKit/ASNetworkImageNode.mm @@ -191,26 +191,28 @@ }); } } else { - // The delegate must be retained, as nothing prevents it from being deallocated during the delay before completionBlock is executed. - // Clients (the delegate) /should/ set our delegate property to nil in their -dealloc, but don't always do this. - __block id delegate = _delegate; - + __weak __typeof__(self) weakSelf = self; void (^finished)(CGImageRef) = ^(CGImageRef responseImage) { + __typeof__(self) strongSelf = weakSelf; + if (strongSelf == nil) { + return; + } + { - ASDN::MutexLocker l(_lock); + ASDN::MutexLocker l(strongSelf->_lock); if (responseImage != NULL) { - _imageLoaded = YES; - self.image = [UIImage imageWithCGImage:responseImage]; + strongSelf->_imageLoaded = YES; + strongSelf.image = [UIImage imageWithCGImage:responseImage]; } - _imageDownload = nil; + strongSelf->_imageDownload = nil; - _cacheUUID = nil; + strongSelf->_cacheUUID = nil; } if (responseImage != NULL) { - [delegate imageNode:self didLoadImage:self.image]; + [strongSelf->_delegate imageNode:self didLoadImage:self.image]; } };