iOS9新特性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sacrifice123/article/details/51743803

一、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];

  iosP.language = [[IOS alloc] init];

  //  iosP = p;

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



三、__kindof

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

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


使用id坏处:

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

2.返回值,没有提示



猜你喜欢

转载自blog.csdn.net/sacrifice123/article/details/51743803