您的位置:首页 > 移动开发 > IOS开发

iOS9新特性

2016-06-23 17:04 387 查看
一、iOS9新出的关键字

作用:用于修饰属性,方法参数,方法返回值

好处:1.迎合swift

           2.提高开发人员的规范,减少程序员之间的交流

关键字:nonnull 对象非空

               nullable 对象可以为空

       null_resettable :get:不能返回为空, set可以为空

             注意:这些关键字只用来修饰对象,并不能用来修饰数据类型。如果使用null_resettable,必须重写get方法或者set方法,处理传递的值为空的情况

几种定义的方式:(如果在使用这些成员变量时没有按照关键字约束赋值,系统会报警告)

@property(nonatomic,copy,nonnull)NSString
*icon;

@property(nonatomic,copy)NSString
* _Nonnull icon1;

@property(nonatomic,copy)NSString
* __nonnull icon2;

NS_ASSUME_NONNULL_BEGIN

@property(nonatomic,copy)NSString
*name;

NS_ASSUME_NONNULL_END

二、泛型、协变、逆变

泛型:限制类型

泛型使用场景:

1.在集合(数组,字典,nsset)中使用泛型比较常见

2.当申明一个类时,其中一些属性的类型不确定时,这时我们才使用泛型

泛型书写规范:

在类型后面定义泛型类型

@property (nonatomic,
strong) NSMutableArray<NSString *> *datas;

泛型好处:

1.提高开发规范,减少程序员之间的交流

2.通过集合取出对象,直接当做泛型类型的对象使用,可以直接使用点语法

下面看个例子:

person类有个language属性,当我们实例化person时,加入了iOS泛型,这样我们给language属性赋值时就会提示它的类型为iOS类。这时赋值其它类型时系统会报警告。但如果泛型没有确定时,这时返回类型是id。



 __covariant(协变):用于泛型数据强转类型,可以向上强转,子类
可以转成
父类

 __contravariant(逆变):用于泛型数据强转类型,可以向下强转,
父类
可以
转成子类

以协变为例:

// 首先声明泛型

@interface Person<__covariant ObjectType> :
NSObject
代码实现:

  Person<Language *> *p = [[Person
alloc]
init];

  Person<IOS *> *iosP = [[Person
alloc] init];

  io
b20d
sP.language = [[IOS
alloc] init];

  //  iosP = p;

  p = iosP;//子类转成父类

三、__kindof
__kindof表示当前类或者它的子类,使用__kindof,在调用的时候很清楚的知道返回值的类型

__kindof Person *:表示可以是Person类或者它的子类

使用id坏处:

1.不能在编译时检查真实类型

2.返回值,没有提示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 9新特性