From 60cf43766b8064ab26832f60df6eba9f27c2e962 Mon Sep 17 00:00:00 2001 From: Scott Goodson Date: Mon, 17 Aug 2015 17:19:51 -0700 Subject: [PATCH] Revert "Switch to use only layers for offscreen working range window." There is an unsolved issue with this optimization that may cause crashes in certain cases. Reverting until it's properly resolved. It doesn't appear to be possible to cause the issue in the test apps used to develop it. This reverts commit 3f982b5c9a7e4a557c102268f11f71b58085ffef. --- AsyncDisplayKit/Details/ASRangeHandlerRender.mm | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/AsyncDisplayKit/Details/ASRangeHandlerRender.mm b/AsyncDisplayKit/Details/ASRangeHandlerRender.mm index 1d47b7d10c..b9cf41c87a 100644 --- a/AsyncDisplayKit/Details/ASRangeHandlerRender.mm +++ b/AsyncDisplayKit/Details/ASRangeHandlerRender.mm @@ -39,12 +39,8 @@ [node recursivelySetDisplaySuspended:NO]; - // Add the node's layer to an off-screen window to trigger display and mark its contents as non-volatile. - // Use the layer directly to avoid the substantial overhead of UIView heirarchy manipulations. - // Any view-backed nodes will still create their views in order to assemble the layer heirarchy, and they will - // also assemble a view subtree for the node, but we avoid the much more significant expense triggered by a view - // being added or removed from an onscreen window (responder chain setup, will/DidMoveToWindow: recursive calls, etc) - [[[self.class workingWindow] layer] addSublayer:node.layer]; + // add the node to an off-screen window to force display and preserve its contents + [[self.class workingWindow] addSubnode:node]; } - (void)node:(ASDisplayNode *)node exitedRangeOfType:(ASLayoutRangeType)rangeType @@ -53,7 +49,7 @@ ASDisplayNodeAssert(rangeType == ASLayoutRangeTypeRender, @"Render delegate should not handle other ranges"); [node recursivelySetDisplaySuspended:YES]; - [node.layer removeFromSuperlayer]; + [node.view removeFromSuperview]; [node recursivelyClearContents]; }