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