From ee152eadf12efb429f05e425f2c1f4516316a7e9 Mon Sep 17 00:00:00 2001 From: Scott Goodson Date: Fri, 18 Dec 2015 16:01:19 -0800 Subject: [PATCH] Remove CALayer and UIView implementations of "name" property. This avoids CoreAnimation from capturing the name from a background thread deep within the internals of AVPlayerLayer, which commits transactions off the main thread. If the main thread is also accessing properties that require the lock, in very specific app architectures relying on AVPlayerLayer, this can cause a deadlock. The "name" property is primarily used by ASDK's unit test infrastructure, so I'm leaving it in place for that purpose - and it may still be used for debugging, if someone wants to set it. It will remain possible to get the node from a layer or view with asyncdisplaykit_node, and access name from there. --- AsyncDisplayKit/ASDisplayNode.h | 2 -- AsyncDisplayKit/ASDisplayNode.mm | 10 ---------- AsyncDisplayKitTests/ASDisplayNodeTests.m | 4 ++-- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.h b/AsyncDisplayKit/ASDisplayNode.h index 23eb84a6b5..b3c333a5fc 100644 --- a/AsyncDisplayKit/ASDisplayNode.h +++ b/AsyncDisplayKit/ASDisplayNode.h @@ -685,7 +685,6 @@ typedef NS_OPTIONS(NSUInteger, ASInterfaceState) * @param node The node to be added. */ - (void)addSubnode:(ASDisplayNode *)node; -- (NSString *)name; @end /** CALayer(AsyncDisplayKit) defines convenience method for adding sub-ASDisplayNode to a CALayer. */ @@ -696,7 +695,6 @@ typedef NS_OPTIONS(NSUInteger, ASInterfaceState) * @param node The node to be added. */ - (void)addSubnode:(ASDisplayNode *)node; -- (NSString *)name; @end @interface ASDisplayNode (Deprecated) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 7758561d96..ed7b097097 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -2279,11 +2279,6 @@ static const char *ASDisplayNodeAssociatedNodeKey = "ASAssociatedNode"; } } -- (NSString *)name -{ - return self.asyncdisplaykit_node.name; -} - @end @implementation CALayer (AsyncDisplayKit) @@ -2293,11 +2288,6 @@ static const char *ASDisplayNodeAssociatedNodeKey = "ASAssociatedNode"; [self addSublayer:node.layer]; } -- (NSString *)name -{ - return self.asyncdisplaykit_node.name; -} - @end diff --git a/AsyncDisplayKitTests/ASDisplayNodeTests.m b/AsyncDisplayKitTests/ASDisplayNodeTests.m index c49f56a660..04e7885ddb 100644 --- a/AsyncDisplayKitTests/ASDisplayNodeTests.m +++ b/AsyncDisplayKitTests/ASDisplayNodeTests.m @@ -36,11 +36,11 @@ static CALayer *layerWithName(NSString *name) { } static NSString *orderStringFromSublayers(CALayer *l) { - return [[l.sublayers valueForKey:@"name"] componentsJoinedByString:@","]; + return [[[l.sublayers valueForKey:@"asyncdisplaykit_node"] valueForKey:@"name"] componentsJoinedByString:@","]; } static NSString *orderStringFromSubviews(UIView *v) { - return [[v.subviews valueForKey:@"name"] componentsJoinedByString:@","]; + return [[[v.subviews valueForKey:@"asyncdisplaykit_node"] valueForKey:@"name"] componentsJoinedByString:@","]; } static NSString *orderStringFromSubnodes(ASDisplayNode *n) {