美文网首页
使用NS_UNAVAILABLE NS_DESIGNATED_

使用NS_UNAVAILABLE NS_DESIGNATED_

作者: yyggzc521 | 来源:发表于2019-07-29 10:07 被阅读0次

    NS_UNAVAILABLE

    标记方法不可用。Xcode不会自动补全,代码中如果调用此方法,会编译报错。但是runtime依然可以调用到此方法。

    例如只允许调用类的初始化方法

    - (instancetype)initWithName:(NSString *)name;
    
    + (instancetype)new NS_UNAVAILABLE;
    //下面3个效果等同
    - (instancetype)init NS_UNAVAILABLE;
    - (instancetype)init __attribute__((unavailable));
    - (instancetype)init __attribute__((unavailable("请使用initWithName:")));
    

    NS_DESIGNATED_INITIALIZER: designed initializer (指定初始化方法)

    - (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;
    + (instancetype)new NS_UNAVAILABLE;
    - (instancetype)init NS_UNAVAILABLE;
    
    • 对于多个 init 方法,苹果给出了一个调用顺序,而我们也应该遵守这种调用顺序,以确保无论外部调用者从哪个入口进入,都能够正确的初始化:


      1972680-fd8ca67023bb3b3a.png
    • 也可以在内部验证参数是否合法,如果不合法就不能成功,并抛出异常。

    - (instancetype)initWithUserID:(NSNumber *)userID {
        self = [super init];
        if (self) {
            if (userID.integerValue <= 0) {
                // raise: 原因
                // format: 具体描述
                [NSException raise:@"error parameter" format:@"user id can not = %@", userID];
            }
            self.userID = userID;
        }
        return self;
    }
    

    参考

    相关文章

      网友评论

          本文标题:使用NS_UNAVAILABLE NS_DESIGNATED_

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