Fix crashes while subclassing ASDisplayNode and subclasses in Swift (#3143)

This commit is contained in:
Michael Schneider
2017-03-07 07:36:08 -08:00
committed by GitHub
parent 1d6221c52b
commit cbd8714260
2 changed files with 20 additions and 8 deletions

View File

@@ -330,8 +330,9 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
- (instancetype)initWithLayerClass:(Class)layerClass
{
if (!(self = [super init]))
if (!(self = [super init])) {
return nil;
}
ASDisplayNodeAssert([layerClass isSubclassOfClass:[CALayer class]], @"should initialize with a subclass of CALayer");
@@ -345,13 +346,18 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
- (instancetype)initWithViewBlock:(ASDisplayNodeViewBlock)viewBlock
{
return [self initWithViewBlock:viewBlock didLoadBlock:nil];
return [self _initWithViewBlock:viewBlock didLoadBlock:nil];
}
- (instancetype)initWithViewBlock:(ASDisplayNodeViewBlock)viewBlock didLoadBlock:(ASDisplayNodeDidLoadBlock)didLoadBlock
{
if (!(self = [super init]))
return [self _initWithViewBlock:viewBlock didLoadBlock:didLoadBlock];
}
- (instancetype)_initWithViewBlock:(ASDisplayNodeViewBlock)viewBlock didLoadBlock:(ASDisplayNodeDidLoadBlock)didLoadBlock
{
if (!(self = [super init])) {
return nil;
}
ASDisplayNodeAssertNotNil(viewBlock, @"should initialize with a valid block that returns a UIView");
@@ -367,13 +373,19 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
- (instancetype)initWithLayerBlock:(ASDisplayNodeLayerBlock)layerBlock
{
return [self initWithLayerBlock:layerBlock didLoadBlock:nil];
return [self _initWithLayerBlock:layerBlock didLoadBlock:nil];
}
- (instancetype)initWithLayerBlock:(ASDisplayNodeLayerBlock)layerBlock didLoadBlock:(ASDisplayNodeDidLoadBlock)didLoadBlock
{
if (!(self = [super init]))
return [self _initWithLayerBlock:layerBlock didLoadBlock:didLoadBlock];
}
- (instancetype)_initWithLayerBlock:(ASDisplayNodeLayerBlock)layerBlock didLoadBlock:(ASDisplayNodeDidLoadBlock)didLoadBlock
{
if (!(self = [super init])) {
return nil;
}
ASDisplayNodeAssertNotNil(layerBlock, @"should initialize with a valid block that returns a CALayer");