美文网首页
Objective-C 碎碎念 4

Objective-C 碎碎念 4

作者: 大地瓜123 | 来源:发表于2017-08-23 14:00 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/ufmddxtx.html