美文网首页iOS基础知识
iOS中的关键字和宏(3):常见的几个宏

iOS中的关键字和宏(3):常见的几个宏

作者: 鄂北 | 来源:发表于2021-09-10 15:37 被阅读0次

    1、NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END

    • 现在新创建的h文件中,xcode都会自动的帮我们加上这两个宏。在这两个宏中间声明的属性和方法参数都默认为nonnull,表示不能为nil,如果为属性或者方法参数设置为nil时,xcode就会给出Null passed to a callee that requires a non-null argument的警告
    • 如果想要取消警告,可以加上__nullable
    @property (nonatomic,copy) NSString * __nullable img_url;
    
    - (void)setCtrlTitle:(NSString * __nullable)titleStr;
    

    2、NS_UNAVAILABLE

    • 表示不能让外界获取到这个方法,比如我写了一个类供外界使用,我们不想让外部调用时用init方法去初始化,而是希望调用我们指定的方法去初始化,就可以在.h文件中这样写
    - (instancetype)init NS_UNAVAILABLE;
    
    • 使用了NS_UNAVAILABLE后在外界调用时编译器不但不会提示补全init方法,就算强制使用了init也会报错

    3、NS_DESIGNATED_INITIALIZER

    • NS_DESIGNATED_INITIALIZER指定初始化方法,当一个类提供多种初始化方法时,所有的初始化方法最终都会调用这个指定的初始化方法
    • 在第三方库中,一个类中会提供多个初始化方法,但是这多个初始化方法可能最终都是调用到了一个初始化方法中,如果在最终的方法中加上了NS_DESIGNATED_INITIALIZER,那么在阅读代码时就能很方便的找到最终的方法,从而省去了从一个一个方法去找的麻烦

    这三个宏在第三方库中经常用到

    系列文章
    iOS中的关键字和宏(1):instancetype与id的区别
    iOS中的关键字和宏(2):static与extern总结

    参考文章
    教你一行代码使用 KVO(Facebook 出品 FBKVOController 源码使用及解读)

    相关文章

      网友评论

        本文标题:iOS中的关键字和宏(3):常见的几个宏

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