ios9新特性

1.新出的关键字:non null , nullable,null_resettable,_Null_unspecified

1.1 nullable 即可以为nil

定义属性:

方式一:

@property (nonatomic, strong, nullable) NSString *name;

方式二:

@property (nonatomic, strong) NSString * _Nullable name;

方式三:

@property (nonatomic, strong) NSString * __nullable name;

1.2 nonnull:表示属性不能为空,

定义属性

方式一:

@property (nonatomic, strong, nonnull) NSString *name;

方式二:

@property (nonatomic, strong) NSString * _Nonnull name;

方式三:

@property (nonatomic, strong) NSString * __nonnull name;

在NS_ASSUME_NONNULL_BEGIN与NS_ASSUME_NONNULL_END之间所有的对象属性,方法参数,方法返回值,默认都是nonnull。

NS_ASSUME_NONNULL_BEGIN

@property (nonatomic, strong) NSString *name;

NS_ASSUME_NONNULL_END

1.3 null_resettable:可以重新设置空,set方法可以为空,get不能为空。

方式一:

@property (nonatomic, strong, null_resettable) NSString *name;

注意:用null_resettable属性,必须重写set,或者get方法,处理传值为nil的情况,可以模仿控制器view的get方法,当view为nil,就自己创建一个.

1.4 _Null_unspecified:不确定是否为空.

方式一:

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

2.泛型:限制类型

2.1 好处:

* 提高程序员开发规范,减少交流成本。

* 从数组或者字典取值,都是id类型,不能调用点语法,但是使用泛型,就可以了。

2.2 开发中使用场景:

* 限制集合中的类型,注意:只能检测方法的调用,因为声明的泛型,只能放在方法中

* 当一个类在声明的时候,某个对象的属性不确定,只有创建对象的时候才确定,可以使用泛型

2.3 例如:

声明泛型,在创建对象的时候,确定泛型,在赋值就有提示了。

ios9新特性_第1张图片

2.3.1

泛型中协变,逆变,用于转换类型

默认带有泛型的变量,互相赋值有报警告,使用协变,逆变,就能解决.

协变(__covariant): 向上转型, 子类转父类

逆变(__contravariant):向下转型 父类转子类

2.4 __kindof:相当于,表示某个类或者他的子类。

用途:设计模型中可以使用,当给某个类提供类方法,想让外界调用能看到创建什么对象,并且不报警告。

例如:

+ (__kindof Person *)person;

你可能感兴趣的:(ios9新特性)