diff --git a/AsyncDisplayKit/ASDisplayNode.h b/AsyncDisplayKit/ASDisplayNode.h index 3d84ee9290..83ff98bc26 100644 --- a/AsyncDisplayKit/ASDisplayNode.h +++ b/AsyncDisplayKit/ASDisplayNode.h @@ -351,7 +351,7 @@ NS_ASSUME_NONNULL_BEGIN /** * @abstract The receiver's immediate subnodes. */ -@property (nonatomic, readonly, strong) NSArray *subnodes; +@property (nonatomic, readonly, copy) NSArray *subnodes; /** * @abstract The receiver's supernode. diff --git a/AsyncDisplayKit/ASDisplayNodeExtras.mm b/AsyncDisplayKit/ASDisplayNodeExtras.mm index 2b384bbdac..dad6da1b70 100644 --- a/AsyncDisplayKit/ASDisplayNodeExtras.mm +++ b/AsyncDisplayKit/ASDisplayNodeExtras.mm @@ -51,7 +51,9 @@ extern void ASDisplayNodePerformBlockOnEveryNode(CALayer *layer, ASDisplayNode * } if (layer) { - for (CALayer *sublayer in [layer sublayers]) { + /// NOTE: The docs say `sublayers` returns a copy, but it does not. + /// See: http://stackoverflow.com/questions/14854480/collection-calayerarray-0x1ed8faa0-was-mutated-while-being-enumerated + for (CALayer *sublayer in [[layer sublayers] copy]) { ASDisplayNodePerformBlockOnEveryNode(sublayer, nil, block); } } else if (node) {