在创建自己的类时,有时候会重写init方法,而格式一般如下:
- (id)init
{
if (self = [super init]) {
// Custom initialization
}
return self;
}
自定义类必然少不了新添加的属性,很多人喜欢在重写的init方法中去初始化这些属性:
@interface MyClass : NSObject
@property (strong, nonatomic) NSMutableArray *list;
@end
@implementation
- (id)init
{
if (self = [super init]) {
_list = [[NSMutableArray alloc] init];
}
return self;
}
@end
这样做中规中矩,但是有很大一个缺点,就是在初始化一个类时,类中所有属性都一并分配内存空间并初始化了。而有些属性当前不会不到,或者很久的将来也不会用到,早早的分配内存难免会浪费。更好的初始化方法时重写getter方法:
@implementation
- (NSMutableArray *)list
{
if (!_list)
_list = [[NSMutableArray alloc] init];
return _list;
}
- (id)init
{
if (self = [super init]) {
// Custom initialization
}
return self;
}
@end
重写getter方法后,在调用属性的getter方法时,会检查当前属性是否是nil,如果是nil则初始化它,否则便返回该属性。这样在init方法中,就不会过早的分配内存,而是等到什么时候用,什么时候分配。大大优化了内存使用。