_Nullable等的用法和总结
转自:https://www.jianshu.com/p/189aaa4dd498
_Nullable等用法
__nullable 和__nonnull。从字面上我们可知, __nullable 表示对象可以是 NULL 或 nil,而 __nonnull 表示对象不应该为空。当我们不遵循这一规则时,编译器就会给出警告。在 Xcode 7 中,为了避免与第三方库潜在的冲突,苹果把 __nonnull/__nullable改成 _Nonnull/_Nullable。再加上苹果同样支持了没有下划线的写法 nonnull/nullable ,于是就造成现在有三种写法这样混乱的局面。
但是这三种写法本质上都是互通的,只是放的位置不同,举例如下:
方法返回值修饰:
- (nullable NSString*)method ;
- (NSString* __nullable)method2 ;
- (NSString* _Nullable)method3 ;
声明属性的修饰:
@property(nonatomic, copy, nullable) NSString *aString;
@property(nonatomic, copy) NSString* __nullable aString;
@property(nonatomic, copy) NSString* _Nullable aString;
方法参数修饰:
- (void)methodWithString:(nullable NSString *)aString;
- (void)methodWithString:(NSString *_Nullable)aString;
- (void)methodWithString:(NSString *__nullable)aString;
而对于双指针类型对象 、 Block 的返回值 、 Block 的参数 等,这时候就不能用 nonnull/nullable 修饰,只能用带下划线的 __nonnull / __nullable 或者 _Nonnull/_Nullable
- (void)methodWithError:(NSError *_Nullable *_Nullable)error;
- (void)methodWithError:(NSError * __nullable * __null_unspecified)error;
// 以及其他的组合方式
- (void)methodWithBlock:(nullable id __nonnull(^)(id __nullable params))block;
- (void)methodWithBlock:(id __nonnull(^ __nullable)(id __nullable params))block;
- (void)methodWithBlock:(id _Nonnull (^ _Nullable)(id _Nullable params))block;
归纳:
对于属性、方法返回值、方法参数的修饰,使用: nonnull/nullable ;
对于 C 函数的参数、Block 的参数、Block 返回值的修饰,使用: _Nonnull/_Nullable
_Nullable等的用法和总结相关推荐
- iOS-class方法和objc_getClass方法
根据上一篇博客iOS-class.object_getClass.objc_getClass.objc_getMetaClass区别的研究发现,发现主要还是class方法和objc_getClass方 ...
- nn.moduleList 和Sequential由来、用法和实例 —— 写网络模型
对于cnn前馈神经网络如果前馈一次写一个forward函数会有些麻烦,在此就有两种简化方式,ModuleList和Sequential.其中Sequential是一个特殊的module,它包含几个子M ...
- JS中的call()方法和apply()方法用法总结
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...
- MATLAB判断三角形成立的编程,Triangulation 划分三角形网络时用到的大量算法和测试例程 matlab 259万源代码下载- www.pudn.com...
文件名称: Triangulation下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 213 KB 上传时间: 2016-05-24 下载次数: 0 详细说 ...
- ADPRL - 近似动态规划和强化学习 - Note 10 - 蒙特卡洛法和时序差分学习及其实例 (Monte Carlo and Temporal Difference)
Note 10 蒙特卡洛法和时序差分学习 Monte Carlo and Temporal Difference 蒙特卡洛法和时序差分学习 Note 10 蒙特卡洛法和时序差分学习 Monte Car ...
- C语言的双向链表头插法和尾插法,指定节点删除
文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...
- scanf()函数的用法和实践
scanf()函数的用法和实践 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策. 关键词: scanf() 一 ...
- 线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现
回归:在这类任务中,计算机程序需要对给定输入预测数值.为了解决这个任务,学习算法需要输出函数f:Rn→R.除了返回结果的形式不一样外,这类问题和分类问题是很像的.这类任务的一个示例是预测投保人的索赔金 ...
- 接口设计文档_app端接口用例设计方法和测试方法(一)
前言 接口测试作为测试的重要一环,重点关注的是数据层面的输入输出,今天小编介绍一种常用的接口测试用例设计方法和测试方法,希望对大家有所帮助,由于内容较多,分三次给大家讲解,今天先介绍"请求层 ...
最新文章
- 在 SQL Server 2K 中实现 大小写敏感的查询条件(WHERE ...),类似 Access(VB) 的 StrComp 函数...
- [RQNOJ313]波浪数
- 成功解决ValueError: DataFrame.dtypes for label must be int, float or bool
- C++ STL : 模拟实现STL中的关联式容器unordered_map/unordered_set
- REVERSE-COMPETITION-HGAME2022-Week4
- 今日头条新出算法大赛!短视频内容理解与推荐竞赛
- Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录
- 等级VIN行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 本示例主要展示如何在XtraGrid网格控件(包含在DevExpress WinForms套包中)的主视图中指定HyperLinkEdit控件作为列编辑器...
- 3小时GIS入门教程(二)GIS数据格式、坐标系
- 【学习笔记】SAP资产模块
- D11:Chickens and Rabbits(鸡兔同笼问题,附题解)
- 【WLAN】【基础知识】WIFI那些事儿之DFS
- 樊登读书赋能读后感_《赋能》读后感心得体会
- GNSS原理及技术(一)——GNSS现状与发展
- 华为怎么显示返回按键_华为怎么把返回那三个键调出来
- Fragment实例之微信界面
- 100天单词学习计划
- 韶音科技2021研究员面试经验
- 头部玩家指的是什么_什么是头部玩家,有没有一个定义?