Objective-C 碎碎念 4

本文为大地瓜原创,欢迎知识共享,转载请注明出处。
虽然你不注明出处我也没什么精力和你计较。
作者微信号:christgreenlaw


OC中的构造方法,要以init开头。构造方法中会初始化成员变量,进行一定程度的初始化配置。必须先初始化父类,再初始化子类。必须判断父类是否初始化成功,只有父类初始化成功了,才可以继续初始化子类,最后返回对象的地址。

- (instancetype)init {
  self = [super init];
  if(self) {
    //initialization...
  }
  return self;
}

instancetype 和 id

id在编译时不能确定真实类型,而instancetype可以。

id可以用来定义变量,当做返回值类型,当做参数类型;
instancetype只能用作返回值类型。

自定义构造方法,请使用instancetype。

自定义构造方法一定以init开头,后面的With一定开头大写。

自定义类工厂方法是苹果的一个规范,一般情况下都是以类名小写开头,With在其后。
Person *p = [Person personWithAge:30];

自定义构造方法、类工厂方法,都要用self来指代本类创建,而不要用类名。(若用类名,则继承的子类还会使用父类来创建,因为你写死了类名)
比如Person类下继承了Student类。

Person

+ (instancetype) person {
  //return [[Person alloc]init];
  return [[self alloc]init];
}

+ (instancetype) personWithAge: (int)age {
  //Person *p = [[Person alloc]init];
  Person *p = [[self alloc]init];
  p.age = age;
  return p;
}

Student *s = [Student personWithAge:10];//看出来问题了吗?

你可能感兴趣的:(Objective-C 碎碎念 4)