init 方法
@interface NSObject <NSObject> {
Class isa OBJC_ISA_AVAILABILITY;
}
- (instancetype)init
重写init方法
如果我们想要让创建对象属性的默认值不是 nil / NULL / 0 ,而是我们自定义的,那么这个时候,我们就可以重写init方法,在这个方法中按照我们自己的想法为对象的属性赋值。
重写init方法的规范
- 必须先调用父类的init方法,然后将方法的返回值赋给self。
- 调用init方法初始化对象有可能会失败,如果初始化失败,返回的就是nil。
- 判断父类是否初始化成功。
重写init方法的代码
```objectivec - (instancetype)init
{
self = [super init];
if (self) {
} return self; } ```//自定义赋值操作
为什么要调用父类的init方法
因为父类的init方法,会初始化父类的属性,所以必须要保证当前对象当中的父类属性也同时被初始化。
重写init方法的缺点
重写init方法的缺点是,每次创建出来的对象属性是一样的。
我们希望,创建对象的时候,对象的属性值是由创建对象的人来指定,而不是写死在init方法中。
自定义构造方法
当系统提供的init方法不能满足需求时,我们可以自定义构造方法,传入自己想要的参数
自定义构造方法的规范
- 返回值必须是instancetype
- 自定义构造方法的名称以initWith开头.
- 方法的实现和init的要求一样。
自定义构造方法的代码
- (instancetype)initWithName:(NSString *)name andAge:(int)age
{
if(self = [super init])
{
self.name = name;
self.age = age;
}
return self;
}