这是什么意思:_Pragma(“clang assume_nonnull begin”)

时间:2017-03-23 21:30:32

标签: objective-c clang llvm

在我阅读了一些Objective-c代码之后,我发现这句话在界面之上,有人可以告诉我其含义,或者感谢给出一些关于clang的教程,非常感谢

1 个答案:

答案 0 :(得分:5)

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

通常通过添加_Nullable_Nonnull属性为声明中的每个指针执行此操作:

int fetch(int * _Nonnull ptr);

这意味着您无法将nil传递给fetch功能。

例如,有时您可能希望每个(或大多数)指针都为非null。将_Nonnull添加到头文件中的每个指针都很繁琐。为了使这更容易,您可以在文件的开头添加pragma,在结尾添加相应的end pragma。这将默认所有指针都为非null。如果您需要一个或两个可以为空,则可以将_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和可空性属性的更多信息