objective-c - 这个: _Pragma ("clang assume_nonnull begin")是什么意思

标签 objective-c clang llvm

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

最佳答案

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

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

int fetch(int * _Nonnull ptr);

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

例如,有时您可能希望每个(或大多数)指针都为非空。必须将 _Nonnull 添加到头文件中的每个指针会变得乏味。为了使这更容易,您可以在文件的开头添加编译指示,并在末尾添加相应的结束编译指示。这会将所有指针默认为非空。如果您随后需要一两个可以为 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 和可空性属性的信息

关于objective-c - 这个: _Pragma ("clang assume_nonnull begin")是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42987377/

相关文章:

ios - 在 Xcode 4.5 "Show Live Issues"中不再起作用

swift - Swift 中的方法最多可以有多少个参数,为什么?

ios - 是否可以在不调用 getter 的情况下检查属性是否为 nil?

iOS UITextView 识别错误链接

c++ - 如何在 clang 库中执行模板替换?

c++ - 是什么让 clang 在包含路径的子目录中查找?

C++ 分发具有依赖关系的程序

iphone - 如何在iOS中获得子字符串?

ios - 使用 UICollectionViewFlowLayout/UICollectionViewLayout 子类,不会在正确的时间调用 CellForItemAtIndexPath

iphone - 用于 iOS 开发的 LLVM 与 GCC