Check for Nil
Remember: +new
can always return nil. ComponentKit adopts the convention that a component may return nil from +new
to signal that it has no data to render.
This is important when you are implementing +new
; you must check if [super +new...]
returned nil before assigning to ivars.
@implementation MyComponent
{
NSString *_name;
}
+ (instancetype)newWithName:(NSString *)name
{
MyComponent *c = [super newWithComponent:...];
c->_name = [name copy]; // Crashes if c is nil
return c;
}
Instead:
+ (instancetype)newWithName:(NSString *)name
{
MyComponent *c = [super newWithComponent:...];
if (c) {
c->_name = [name copy];
}
return c;
}
(This is somewhat analogous to the usual pattern for implementing -init
, where you check if [super init...]
returns nil.)