From b2810edb0f525399fd38019d8dfd6af470dfeaf4 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Fri, 8 Jul 2016 14:41:19 -0700 Subject: [PATCH] Move dealloc method from ASImageNode+AnimatedImage category to ASImageNode Having a dealloc method in a category can be very problematic as the superclass dealloc method will not be called in case it exists. --- AsyncDisplayKit/ASImageNode+AnimatedImage.mm | 6 +++++- AsyncDisplayKit/ASImageNode.mm | 6 ++++++ AsyncDisplayKit/Private/ASImageNode+AnimatedImagePrivate.h | 7 +++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/AsyncDisplayKit/ASImageNode+AnimatedImage.mm b/AsyncDisplayKit/ASImageNode+AnimatedImage.mm index e51305a298..cbaff6d42b 100644 --- a/AsyncDisplayKit/ASImageNode+AnimatedImage.mm +++ b/AsyncDisplayKit/ASImageNode+AnimatedImage.mm @@ -233,7 +233,11 @@ NSString *const ASAnimatedImageDefaultRunLoopMode = NSRunLoopCommonModes; return frameIndex; } -- (void)dealloc +@end + +@implementation ASImageNode(AnimatedImageInvalidation) + +- (void)invalidateAnimatedImage { ASDN::MutexLocker l(_displayLinkLock); #if ASAnimatedImageDebug diff --git a/AsyncDisplayKit/ASImageNode.mm b/AsyncDisplayKit/ASImageNode.mm index 024bf1370d..4af9d7b290 100644 --- a/AsyncDisplayKit/ASImageNode.mm +++ b/AsyncDisplayKit/ASImageNode.mm @@ -110,6 +110,12 @@ struct ASImageNodeDrawParameters { return nil; } +- (void)dealloc +{ + // Invalidate all components around animated images + [self invalidateAnimatedImage]; +} + #pragma mark - Layout and Sizing - (CGSize)calculateSizeThatFits:(CGSize)constrainedSize diff --git a/AsyncDisplayKit/Private/ASImageNode+AnimatedImagePrivate.h b/AsyncDisplayKit/Private/ASImageNode+AnimatedImagePrivate.h index 64a20d8cc3..95f352d2dc 100644 --- a/AsyncDisplayKit/Private/ASImageNode+AnimatedImagePrivate.h +++ b/AsyncDisplayKit/Private/ASImageNode+AnimatedImagePrivate.h @@ -31,3 +31,10 @@ extern NSString *const ASAnimatedImageDefaultRunLoopMode; @property (atomic, assign) CFTimeInterval lastDisplayLinkFire; @end + + +@interface ASImageNode (AnimatedImageInvalidation) + +- (void)invalidateAnimatedImage; + +@end