ObjC 基础-属性/方法参数关键字(nonnull、nullable、null_resettable、null_unspecified) 的用法与区别_VanTyler
iOS开发时-会经常看到苹果的API会出现(nonnull、nullable、null_resettable、null_unspecified) 关键字,不知道怎么什么意思,有什么用?...
iOS9新增关键字
可以用来修饰属性、方法的参数、方法的返回值。* 只能修饰指针类型,不能修饰基本数据类型。
nonnull:表示修饰的属性或参数不能为空。nullable:表示修饰的属性或参数可以为空(默认属性)。null_resettable:表示修饰的属性,getter方法一定不能返回为空, setter可以为空。null_unspecified:表示修饰的属性或参数不确定是否为空。nullable
数字代表体现的特点或参数值行为空(默认设置特点)。 修饰方式:// 方式一:
@property (nonatomic, copy, nullable) NSString *name1;
// 方式二:
@property (nonatomic, copy) NSString *_Nullable name2;
// 方式三:
@property (nonatomic, copy) NSString *__nullable name3;
修饰方法方式:
// 方式一:
- (nullable NSString *)funcFirstName:(nullable NSString *)name;
// 方式二:
- (NSString * _Nullable)funcSecondName:(NSString * _Nullable)name;
// 方式三:
- (NSString * __nullable)funcThirdName:(NSString * __nullable)name;
nonnull
觉得突显的附属性或参数指标不允许为空。 修饰属性方式:// 方式一:
@property (nonatomic, copy, nonnull) NSString *name;
// 方式二:
@property (nonatomic, copy) NSString * _Nonnull name;
// 方式三:
@property (nonatomic, copy) NSString * __nonnull name;
修饰方法方式:
// 方式一:
- (nonnull NSString *)funcFirstName:(nonnull NSString *)name;
// 方式二:
- (NSString * _Nonnull)funcSecondName:(NSString * _Nonnull)name;
// 方式三:
- (NSString * __nonnull)funcThirdName:(NSString * __nonnull)name;
区域设置(Audited Regions):
实际开发中,如果需要每个属性或每个方法的参数和返回值都去指定nonnull和nullable,是一件非常繁琐的事。苹果为了减轻开发者的工作量,专门提供了两个宏:NS_ASSUME_NONNULL_BEGIN、
NS_ASSUME_NONNULL_END。
苹果用这两个宏来统一给属性和方法参数和返回值加上nonnull修饰,NS_ASSUME_NONNULL_BEGIN 和 NS_ASSUME_NONNULL_END之间,定义的所有对象属性和方法默认都是nonnull。
为了能安全的尽量,apple还实行了两条方式:1.typedef定义的类型的nullability特性通常依赖于上下文,即使是在Audited Regions中,也不能假定它为nonnull。
2.复杂的指针类型(如id)必须去指定是nonnull还是nullable。
3.我们经常使用的NSError通常是被假定为是一个指向可以为空的对象(NSError)。
null_resettable
表明呈现的特性,getter的办法一定程度无法跳转为空, setter可能为空。 修饰属性方式:@property (nonatomic, strong, null_resettable) NSString *name;
null_unspecified
带表绘制的抗性或产品参数不确认什么情况下为空。 修饰属性方式:// 方式一:
@property (nonatomic,strong) NSNumber*_Null_unspecified height1;
// 方式二:
@property (nonatomic,strong) NSNumber*__null_unspecified height2;
// 方式三:
@property (nonatomic,strong,null_unspecified) NSNumber* height3;
修饰方法方式:
// 方式一:
- (null_unspecified NSNumber *)funcHeight1:(null_unspecified NSNumber *)height;
// 方式二:
- (NSNumber * _Null_unspecified)funcHeight2:(NSNumber * _Null_unspecified)height;
// 方式三:
- (NSNumber * __null_unspecified)funcHeight3:(NSNumber * __null_unspecified)height;
皇冠新体育APP相关的文章
- RabbitMQ消息丢失的场景,如何保证消息不丢失?(详细讲解,一文看懂)_十八岁讨厌Java_rabbitmq 怎么避免消息丢失
- 皇冠新体育APP:【RabbitMQ】回顾下RabbitMQ知识点,还记得哪些?_小冷coding
- 【Windows安装RabbitMQ详细教程】_普通网友
- 皇冠新体育APP:RocketMQ 的优缺点_文丑颜不良啊_rocketmq优劣
- Zookeeper入门及使用_浪子阿志_zookeeper怎么用到项目中
- 皇冠新体育APP:xxl-job+rabbitmq 进行定时的微信消息推送_BlogY_rabbitmq定时推送消息
- 皇冠新体育APP:RabbitMQ安装(发生系统错误5。拒绝访问)解决方案_JSUITDLWXL
- ElasticJob+Spring Boot简单使用_defer哈哈_elasticjob springboot
- 皇冠新体育APP:RabbitMQ 如何避免消息重复消费?_久违の欢喜_rabbitmq 消息不重复
- 皇冠新体育APP:Docker安装RabbitMQ_lianaozhe
- RabbitMQ之发布确认(单个发布确认,批量发布确认,异步发布确认)_qq_42212926_rabbitmq批量发送消息
- MQ学习之史上最全RabbitMQ(强烈建议收藏)_码海兴辰_rabbitmq发送文件
- 皇冠新体育APP:RabbitMQ 3.10.7超详细安装教程(Linux)_yuanchenzhen
- Zookeeper??集群搭建 & 选举机制_宋子浩
- 皇冠新体育APP:Ubuntu安装RabbitMQ_biubiu558_ubuntu安装erlang
- 皇冠新体育APP:RabbitMQ快速入门_念舒_C.ying