iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)

一、nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值)

代码:程序员

 
 1 //三种使用方式均可以  2 @property (nonatomic, copy, nonnull) NSString *name;  3  4 @property (nonatomic, copy) NSString * _Nonnull name;  5  6 @property (nonatomic, copy) NSString * __nonnull name;  7  8 //补充(不适用于assign属性,由于它是专门用来修饰指针的)  9 @property (nonatomic, assign) NSUInteger age; 10 11 //补充(用下面宏包裹起来的属性所有都具nonnull特征,固然,若是其中某个属性你不但愿有这个特征,也能够本身定义,好比加个nullable) 12 //在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间,定义的全部对象属性和方法默认都是nonnull
 

 

1 //也能够在定义方法的时候使用 2 //返回值和参数都不能为空 3 - (nonnull NSString *)test:(nonnull NSString *)name; 4 //同上 5 - (NSString * _Nonnull)test1:(NSString * _Nonnull)name;

 这样,你在使用以上方法的时候会出现这种效果提示编程

一样,使用属性的时候:atom

 

二、nullable:表示能够为空(使用方法和上面几乎同样,可是没有发现和上面相似的宏)

代码(大概看一下,参考上面就好了):spa

 
1 //三种使用方式 2 // 方式一: 3 @property (nonatomic, copy, nullable) NSString *name; 4 // 方式二: 5 @property (nonatomic, copy) NSString *_Nullable name; 6 // 方式三: 7 @property (nonatomic, copy) NSString *__nullable name;
 

效果:3d

这样,当在使用这个属性的时候,Xcode的代码提示会告诉你这个属性是能够为空的,算是一种编程规范吧,减小程序员之间的交流。指针

 三、null_resettable: get:不能返回空, set能够为空(注意:若是使用null_resettable,必须 重写get方法或者set方法,处理传递的值为空的状况)

 // 书写方式:code

 1 @property (nonatomic, copy, null_resettable) NSString *name; 对象

设置一下set或get方法blog

 
 1 - (void)setName:(NSString *)name  2 {  3 if (name == nil) {  4 name = @"我叫畅敏";  5  }  6 _name = name;  7 }  8 - (NSString *)name  9 { 10 if (_name == nil) { 11 _name = @"我叫畅敏"; 12  } 13 return _name; 14 }
 

四、_Null_unspecified:不肯定是否为空

使用方式只有这两种:ci

1 @property (nonatomic, strong) NSString *_Null_unspecified name;

1 @property (nonatomic, strong) NSString *__null_unspecified name; 

 

总结:我理解这些东西主要就是为了提升开发规范,提示使用的人应该传什么样的值,若是违反了对规范值的要求,就会有警告;

相关文章
相关标签/搜索