iOS9新特性关键词

nonnull

1、作用:表示不能为空

2、用法:

(1)属性

nonnull 声明的属性不能为空(getter方法和setter方法都有)

@property (nonnull, nonatomic, copy) NSString *name; //写法一
@property (nonatomic, copy) NSString *__nonnull name; //写法二,小写时为两个下划线
@property (nonatomic, copy) NSString *_Nonnull name; //写法三,大写时为一个下划线

这里需要注意一个问题:

person.name = nil;//系统会有警告不能给这个属性赋nil

NSString *string = nil;
[person setName:string];//这里系统不会识别到

每个属性都要写关键字很麻烦,可以用下面的方法

NS_ASSUME_NONNULL_BEGIN

@interface ViewController : UIViewController

@property (nonatomic, weak) UILabel *label;
@property (nonatomic, weak) UIButton * __nullable button;
@property (null_resettable, nonatomic, strong) NSArray *friends;

@end

NS_ASSUME_NONNULL_END

在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间,定义的所有对象属性和方法默认都是nonnull

NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END 要成对出现,不然报错

一般用于头文件.h 将声明包含起来针对所有属性添加 nonnull 修饰

也就是说, 除了nullable和null_resetable需要加修饰, 其他都不需要加修饰

(2)参数

系统提示该方法的参数不能为空

[array addObject:(nonnull NSString *)];
[array addObject:(NSString * __nonnull)];
[array addObject:(NSString * _Nonnull)];

nullable

1、作用:表示可以为空

2、举例说明:

(1)属性

nullable 声明的属性可以为空

@property (nullable, nonatomic, copy) NSString *gender; //写法一
@property (nonatomic, copy) NSString * __nullable gender; //写法二,小写时为两个下划线
@property (nonatomic, strong) NSString * _Nullable gender; //写法三,大写时为一个下划线

(2)参数

[person setGender:(NSString * _Nullable)];
[person setGender:(NSString * __nullable)];
[person setGender:(NSString * _Nullable)];

null_resettable

1、作用:setter可为空, getter不可为空

setter方法是nullable(可以赋空值),getter方法是nonnull(取值不能为空)

2、用法:

(1)属性

用null_resettable来修饰属性,表示这个属性的初始化采用了懒加载方式

@property(null_resettable, nonatomic, strong) UIView *view;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值