构造方法可以用于定义函数的初始化的默认值。OC默认的构造方法是NSObject的init方法。
Person *p=[Person new];它与Person *p=[[Person alloc] init];等价
当构造方法没有实现时,编译器默认使用NSObject的init方法。
但是经常会有这样的情况,需要定义的初始化对象的属性值和OC默认的不同。
例如枪类中,如果子弹数量的类型是int,在初始化的时候就不希望子弹的数目是init方法默认的0。
这个时候就需要重写构造方法。
以有参数的构造方法为例:
- (instancetype)initWithBullet:(int)count {
//通常对象的返回值是id类型或instancetype类型,在最近的xcode版本中,苹果推荐使用instancetype类型
if (self = [super init]) {
//self = [super init]这句话通常也是格式必须的,因为当前的类可能是继承自某一个父类,初始化的成员变量可能不是全部,因此要首先调用父类的init方法来初始化继承来的属性,当父类初始化成功,赋值的返回值也为真,if条件成立,接下来的赋值工作才能进行。
_count = count;
//此处是给对象自己独有的属性进行初始化,也可以给继承来的属性重新赋值(@public或者@protected关键字声明时)
}
return self;
//赋值完成后,返回当前对象的部分。
}
因此,构造方法的格式如下:
- (instancetype)initWith类名:传递的参数类型以及参数名 {
if (self = [super init]) {
当前类独有的属性赋值的部分;
return self;
} |