1、nonnull和nullable
声明属性是否可以为nil,如果对nonnull属性赋值为nil,则会报警告。
@property (nonatomic, strong, nonnull) NSArray *array1;
@property (nonatomic, strong) NSArray * __nullable array2;
作用主要是开发者之间交互,调用属性时可以知道这个属性是可能为nil的,针对这个状态做些处理。
默认情况下就是nullable状态。
可以用来给方法的参数最要求,比如定一个方法,参数为一个不为空的对象:
-(void)doSomethingWithValue:(NSArray*__nonnull)array{}
如果调用的时候传入nil,则会报警告。
2、null_resettable
声明属性set方法可以为nil,但是get一定不能为nil,就是可以定义个属性为nil,但是在获取这个属性的时候,这个属性不能为nil,否则会有警告。
@property(nonatomic,strong,null_resettable)NSArray*array1; //空值,就需要重新set方法
在.m文件中,@implementation
[self setArray1:nil];//此行代码无警告
但是@implementation中会报警告,要求重写set方法:
-(void)setArray1:(NSArray*)array1{
if(!array1)return;//如果赋值为nil直接return
_array1=array1;
}
这里用到的地方例如在UIViewController中的view,意味着开发者可以对控制器的view清空赋值为nil,但是控制器view是懒加载的,每次获取控制器的view时候,都可以再获取到非nil的view。
网友评论