构造方法
我们创建一个对象的时候一般喜欢直接调用一个类方法,比如有一个Person类,我们为这个Person类创建对象一般是直接这样[Person new];其实new是NSObject中的一个类方法,这个new方法中是先调用了alloc方法,alloc方法也是一个类方法,作用是创建这个类的对象,再将这个对象的指针返回;再调用创建的对象的对象方法init,作用是初始化创建的对象的属性,然后返回这个已经被初始化的对象。
比如: Person *p1 = [Person new];
完全等价于:
Person *p1 = [[Person alloc] init];
init方法叫做构造方法,它是定义于NSObject类中的一个对象方法,这个方法主要就是初始化所有的属性,基本类型属性初始化为0,非OC类型属性初始化为NULL,OC类型属性初始化为nil。因此,在默认情况下,我们创建一个对象,初始化完毕后,这个对象的属性都是有默认值的。
但是,如果我们想创建一个对象时对象的属性的默认值不是0、NULL、nil的时候,我们应该重写构造方法。重写构造方法步骤如下:
1). 先调用父类的init方法 来初始化父类的属性.
2). 将调用父类的init方法返回的对象赋值给self
3). 判断调用父类的init方法是否初始化成功
4). 如果成功,再初始化当前子类对象的属性.
5). 返回1个被完全初始化的对象. 返回self
6). 应该再写一个类方法,返回[[self alloc] init]

- (instancetype)initWithxxxx:(参数类型)参数列表
{
if(self = [super init])
{
初始化当前子类对象的属性.
}
return self;
}

+ (instancetype)类名Withxxxx:(参数类型)参数列表
{
return [[self alloc] init];
}