【发布时间】:2017-03-23 21:30:32
【问题描述】:
看了一些Objective-c的代码,发现界面上面有这句话,谁能告诉我什么意思,或者给一些clang的教程,非常感谢
【问题讨论】:
标签: objective-c clang llvm
看了一些Objective-c的代码,发现界面上面有这句话,谁能告诉我什么意思,或者给一些clang的教程,非常感谢
【问题讨论】:
标签: objective-c clang llvm
在较新版本的 Objective-C 编译器 (clang) 中,参数、返回值、变量和属性可以定义为允许或不允许空值。
这通常通过添加_Nullable 或_Nonnull 属性为声明中的每个指针完成:
int fetch(int * _Nonnull ptr);
这意味着您不能将nil 传递给fetch 函数。
例如,有时您可能希望每个(或大多数)指针都不为空。将_Nonnull 添加到头文件中的每个指针会变得很乏味。为了使这更容易,您可以在文件的开头添加 pragma,并在末尾添加相应的 end pragma。这将使所有指针默认为非空。如果您需要一两个可以为空,您可以将 _Nullable 添加到这些指针。
在 iOS 和 macOS 中,您可以使用 NS_ASSUME_NONNULL_BEGIN 和 NS_ASSUME_NONNULL_END 代替 _Pragma("clang assume_nonnull begin") 和 _Pragma("clang assume_nonnull end")。
当然,如果您希望所有内容都默认为可空而不是非空,也有“可空”版本。
您可以在 https://clang.llvm.org/docs/AttributeReference.html#nullability-attributes 阅读更多关于 clang 和可空性属性的信息
【讨论】: