From 76b38cbe6e6bbd7aedf8550e717631236f43379a Mon Sep 17 00:00:00 2001 From: Scott Goodson Date: Tue, 22 Mar 2016 14:32:32 -0700 Subject: [PATCH] [ASInterfaceState] Clear the "Visible" bit immediately upon deallocation, rather than waiting for ASRangeController on the next runloop. --- AsyncDisplayKit/ASDisplayNode.mm | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index f1b6aa26f2..fa696f58ba 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -337,6 +337,8 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) - (void)dealloc { ASDisplayNodeAssertMainThread(); + + self.interfaceState &= ~ASInterfaceStateVisible; self.asyncLayer.asyncDelegate = nil; _view.asyncdisplaykit_node = nil; @@ -2076,13 +2078,7 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) [self setDisplaySuspended:NO]; } else { [self setDisplaySuspended:YES]; - //schedule clear contents on next runloop - dispatch_async(dispatch_get_main_queue(), ^{ - ASDN::MutexLocker l(_propertyLock); - if (ASInterfaceStateIncludesDisplay(_interfaceState) == NO) { - [self clearContents]; - } - }); + [self clearContents]; } } else { // NOTE: This case isn't currently supported as setInterfaceState: isn't exposed externally, and all @@ -2094,13 +2090,7 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) [ASDisplayNode scheduleNodeForRecursiveDisplay:self]; } else { [[self asyncLayer] cancelAsyncDisplay]; - //schedule clear contents on next runloop - dispatch_async(dispatch_get_main_queue(), ^{ - ASDN::MutexLocker l(_propertyLock); - if (ASInterfaceStateIncludesDisplay(_interfaceState) == NO) { - [self clearContents]; - } - }); + [self clearContents]; } } }