美文网首页
Convenience initializer missing

Convenience initializer missing

作者: yehkong | 来源:发表于2018-03-05 12:35 被阅读0次

序言:上一篇文章,我小结了一下Method override for the designated initializer of the superclass '-init' not found警告引发的“学案”,这次在简单小结一下Convenience initializer missing a 'self' call to another initializer编译器警告。

  • 同样用上一篇文章的代码来说明:
//FileRepresentation.h
@interface FileRepresentation : NSObject
@property (nonatomic, strong) NSURL *url;
-(instancetype)initWithUrl:(NSURL*)url NS_DESIGNATED_INITIALIZER;
@end

//FileRepresentation.m
@implementation FileRepresentation
-(instancetype)init //警告Convenience initializer missing a 'self' call to another initializer
{
    if (self = [super init]) { //警告Convenience initializer should not invoke an initializer on 'super'
    //other code
    }
   return self;
}
-(instancetype)initWithUrl:(NSURL *)url
{
    if (self = [super init]) {
        _url = url;
    }
    return self;
}
@end
  • 分析:因为该子类已经指定了-(instancetype)initWithUrl:(NSURL *)url为DESIGNATED_INITIALIZER,所以继承来的-(instancetype)init方法就成了Convenience initializer。
    当我们标记一个初始化方法为DESIGNATED_INITIALIZER,其他方法就看作是Convenience initializer方法,另外Convenience initializer方法需要调用其他initializer,并且初始化方法调用链必须以DESIGNATED_INITIALIZER结束。这就容易理解上面两个警告了。
  • 解决方法:在第二个警告处调用该子类新定义的DESIGNATED_INITIALIZER,这样既解决了第一个警告需要调用 another initializer “-(instancetype)initWithUrl:(NSURL *)url”,也解决了第二个警告不可调用 an initializer on 'super'。代码如下:
@implementation FileRepresentation
-(instancetype)init
{
    if (self = [self initWithUrl:nil]) {
    }
   return self;
}

-(instancetype)initWithUrl:(NSURL *)url
{
    if (self = [super init]) {
        _url = url;
    }
    return self;
}
@end
  • 当然了,这里也可以用diagnostic push-pop让编译器不报警告,就不累述了。

相关文章

  • Convenience initializer missing

    序言:上一篇文章,我小结了一下Method override for the designated initial...

  • Swift:便利构造器

    由一段对象序列化的代码,分析designated initializer 和 convenience initia...

  • Swift 杂谈(二)

    1,convenience便捷构造函数 convenience :便利,使用convenience 修饰的构造函数...

  • swift常用知识点总结

    一、convenience便利方法 convenience:便利,使用convenience修饰的构造函数叫做便利...

  • Swift面试题总结

    1.convenience : 便利,使用convenience修饰的构造函数叫做便利构造函数 // 便利构造函数...

  • convenience

    1.今天晚上朋友问我是不是swift4.0中 这个方法在分类里面用不了了我也是从2.0开始接触swift,3.0中...

  • [iOS]三方框架常见宏解读

    NS_DESIGNATED_INITIALIZER NS_DESIGNATED_INITIALIZER的作用是指定...

  • swift convenience init

    convenience init 只作为补充和提供使用上的方便。并且convenience init 不能被子类重...

  • 关于objc_designated_initializer介绍

    什么是NS_DESIGNATED_INITIALIZER NS_DESIGNATED_INITIALIZER是Xc...

  • Swift_convenience

    convenience : 如果构造方法前面没有convenience单词,代表该方法是出事话构造方法(指定构造方...

网友评论

      本文标题:Convenience initializer missing

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