_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端接口用例设计方法和测试方法(一)
前言 接口测试作为测试的重要一环,重点关注的是数据层面的输入输出,今天小编介绍一种常用的接口测试用例设计方法和测试方法,希望对大家有所帮助,由于内容较多,分三次给大家讲解,今天先介绍"请求层 ...
最新文章
- 【物联网】NB-IoT简介
- 30天敏捷结果(27):做些有重要意义的事
- linux 调用 fudanNLP
- NGUI: UIPanel控件
- 触发器deleted 表和 inserted 表详解(转)
- HarmonyOS之sdkmgr命令的使用
- TensorFlow:实战Google深度学习框架(五)图像识别与卷积神经网络
- 【Linux基础】压缩和解压
- Windows 7中的远程桌面增强(Graphics Remoting, Remote Desktop)
- 数据科学 IPython 笔记本 7.15 高性能 Pandas
- webpack2.0构建Reactjs基础工程
- java销毁servlet_「销毁session」Servlet销毁session - seo实验室
- 【转载】20种PLC对应Modbus地址表
- 鼠标键盘录制工具 脚本录制器 游戏脚本录制工具
- U2000V200R018 的安装教程我们用微软的Windows7专业版示例
- 软件工程--总体设计过程包括那些步骤---软件设计过程中应该遵循那些基本原理--模块独立性
- 阿里安全人机行为识别比赛 前五名队伍分享
- Staking来袭,10亿级市场打开! | 火星总编时刻NO.31
- 001,Python微信接龙脚本与腾讯会议定时挂网课脚本
- 学习笔记:全局变量定义“无须”初始化,局部变量必须初始化
热门文章
- 阿里云万网域名解析免费教程
- 深圳云计算培训:带你在Linux的世界翱翔
- 3.1-3.31推荐文章汇总
- 移动web-空间转换
- VirtualBox 共享文件夹没有执行权限解决方法
- C语言打印出心形表白,520神器,初学者也能看懂!!
- 朋友圈发图多大不会被压缩_孕期多吃四类食物,生出来的宝宝颜值通常不会低,眼睛大皮肤也好...
- 2022第七届少儿模特明星盛典 代言人陈颢天 T台风采展示
- JavaScript学习笔记(一轮)完结
- 北京大学数据科学计算机科学与技术,北大考博辅导:北京大学数据科学(计算机科学与技术)考博难度解析及经验分享...