Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.

Commit 10d258b

Browse files
Adlai Hollergarrettmoon
authored andcommitted
Prevent Adding View-Backed Nodes to Layer-Backed Hierarchies (#3062)
* Prevent adding view-backed nodes to layer-backed nodes * Do that in a different diff * Fix the message * Update tests * Fix the fix
1 parent d270577 commit 10d258b

3 files changed

Lines changed: 14 additions & 8 deletions

File tree

AsyncDisplayKit/ASDisplayNode.mm

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2543,6 +2543,11 @@ - (void)_insertSubnode:(ASDisplayNode *)subnode atSubnodeIndex:(NSInteger)subnod
25432543
return;
25442544
}
25452545

2546+
if (self.layerBacked && !subnode.layerBacked) {
2547+
ASDisplayNodeFailAssert(@"Cannot add a view-backed node as a subnode of a layer-backed node. Supernode: %@, subnode: %@", self, subnode);
2548+
return;
2549+
}
2550+
25462551
__instanceLock__.lock();
25472552
NSUInteger subnodesCount = _subnodes.count;
25482553
__instanceLock__.unlock();
@@ -3169,7 +3174,7 @@ - (void)setHierarchyState:(ASHierarchyState)newState
31693174
ASDisplayNodeAssert(_flags.synchronous == NO, @"Node created using -initWithViewBlock:/-initWithLayerBlock: cannot be added to subtree of node with shouldRasterizeDescendants=YES. Node: %@", self);
31703175
}
31713176

3172-
// Entered or exited contents rendering state.
3177+
// Entered or exited range managed state.
31733178
if ((newState & ASHierarchyStateRangeManaged) != (oldState & ASHierarchyStateRangeManaged)) {
31743179
if (newState & ASHierarchyStateRangeManaged) {
31753180
[self enterInterfaceState:self.supernode.interfaceState];

AsyncDisplayKitTests/ASDisplayNodeTests.mm

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,33 +1098,34 @@ - (void)testSubnodes
10981098

10991099
- (void)testReplaceSubnodeNoView
11001100
{
1101-
[self checkReplaceSubnodeWithView:NO layerBacked:NO];
1101+
[self checkReplaceSubnodeLoaded:NO layerBacked:NO];
11021102
}
11031103

11041104
- (void)testReplaceSubnodeNoLayer
11051105
{
1106-
[self checkReplaceSubnodeWithView:NO layerBacked:YES];
1106+
[self checkReplaceSubnodeLoaded:NO layerBacked:YES];
11071107
}
11081108

11091109
- (void)testReplaceSubnodeView
11101110
{
1111-
[self checkReplaceSubnodeWithView:YES layerBacked:NO];
1111+
[self checkReplaceSubnodeLoaded:YES layerBacked:NO];
11121112
}
11131113

11141114
- (void)testReplaceSubnodeLayer
11151115
{
1116-
[self checkReplaceSubnodeWithView:YES layerBacked:YES];
1116+
[self checkReplaceSubnodeLoaded:YES layerBacked:YES];
11171117
}
11181118

11191119

1120-
- (void)checkReplaceSubnodeWithView:(BOOL)loaded layerBacked:(BOOL)isLayerBacked
1120+
- (void)checkReplaceSubnodeLoaded:(BOOL)loaded layerBacked:(BOOL)isLayerBacked
11211121
{
11221122
DeclareNodeNamed(parent);
11231123
DeclareNodeNamed(a);
11241124
DeclareNodeNamed(b);
11251125
DeclareNodeNamed(c);
1126+
DeclareNodeNamed(d);
11261127

1127-
for (ASDisplayNode *n in @[parent, a, b, c]) {
1128+
for (ASDisplayNode *n in @[parent, a, b, c, d]) {
11281129
n.layerBacked = isLayerBacked;
11291130
}
11301131

@@ -1136,7 +1137,6 @@ - (void)checkReplaceSubnodeWithView:(BOOL)loaded layerBacked:(BOOL)isLayerBacked
11361137
[parent layer];
11371138
}
11381139

1139-
DeclareNodeNamed(d);
11401140
if (loaded) {
11411141
XCTAssertFalse(d.nodeLoaded, @"Should not yet be loaded");
11421142
}

examples/ASDKgram/Sample/CommentsNode.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ - (void)createCommentLabels
9696
for (NSUInteger i = 0; i < numLabelsToAdd; i++) {
9797

9898
ASTextNode *commentLabel = [[ASTextNode alloc] init];
99+
commentLabel.layerBacked = YES;
99100
commentLabel.maximumNumberOfLines = 3;
100101

101102
[_commentNodes addObject:commentLabel];

0 commit comments

Comments
 (0)