【问题标题】:what's the meaning of this: _Pragma("clang assume_nonnull begin")这是什么意思:_Pragma("clang assume_nonnull begin")
【发布时间】:2017-03-23 21:30:32
【问题描述】:

看了一些Objective-c的代码,发现界面上面有这句话,谁能告诉我什么意思,或者给一些clang的教程,非常感谢

【问题讨论】:

    标签: objective-c clang llvm


    【解决方案1】:

    在较新版本的 Objective-C 编译器 (clang) 中,参数、返回值、变量和属性可以定义为允许或不允许空值。

    这通常通过添加_Nullable_Nonnull 属性为声明中的每个指针完成:

    int fetch(int * _Nonnull ptr);
    

    这意味着您不能将nil 传递给fetch 函数。

    例如,有时您可能希望每个(或大多数)指针都不为空。将_Nonnull 添加到头文件中的每个指针会变得很乏味。为了使这更容易,您可以在文件的开头添加 pragma,并在末尾添加相应的 end pragma。这将使所有指针默认为非空。如果您需要一两个可以为空,您可以将 _Nullable 添加到这些指针。

    在 iOS 和 macOS 中,您可以使用 NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END 代替 _Pragma("clang assume_nonnull begin")_Pragma("clang assume_nonnull end")

    当然,如果您希望所有内容都默认为可空而不是非空,也有“可空”版本。

    您可以在 https://clang.llvm.org/docs/AttributeReference.html#nullability-attributes 阅读更多关于 clang 和可空性属性的信息

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 2013-08-17
      • 2011-09-04
      相关资源
      最近更新 更多