美文网首页iOS 开发程序员iOS 开发
NS_DESIGNATED_INITIALIZER(Design

NS_DESIGNATED_INITIALIZER(Design

作者: xiaocheche | 来源:发表于2016-01-14 15:43 被阅读593次

    每个类可以有多个以init为前缀的初始化方法:

    #define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
    
    - (instancetype)init;
    - (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;
    
    /*
        init是 convenience initializer方法只是简单的调用initWithName:(指定初始化器),并设置一个默认值。initWithName:进行完整的初始化并调用父类的init方法。
        指定初始化器有以下几个规则:
              1.指定初始化器方法必须调用父类的指定初始化器方法,如果父类为NSObject时调用  
                  [super init]。
              2.convenience initializer方法必须调用其他的初始化方法,知道最后指向指定初始化
                  器方法。
              3.一个类如果有指定初始化器方法,那么就必须实现所有父类的指定初始化器方法。
    */
    - (instancetype)init {
      return [self initWithName:@"Unknown"];
    }
    - (instancetype)initWithName:(NSString *)name {
      self = [super init];
      if (self) {
        _name = [name copy];
      }
      return self;
    }
    

    相关文章

      网友评论

        本文标题:NS_DESIGNATED_INITIALIZER(Design

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