Ios面试复习--泛型
2017-12-06 本文已影响0人
金克拉拉拉拉
1.Ios9 新特性---泛型
--1.在集合类数据中 ,直接索引出存储的某一对象调用更方便
规定该集合类的存储数据类型
![](https://img.haomeiwen.com/i6268972/3b46f4d1e63f6619.png)
![](https://img.haomeiwen.com/i6268972/2323586fe648291a.png)
直接调用方法更便利
--2.动态绑定属性类型
声明该对象持有某一泛型,并将该泛型,用作某属性类型,这样的设计优于id这种动态数据类型
![](https://img.haomeiwen.com/i6268972/d3d2f0456706a7cb.png)
声明某一变量为泛型
![](https://img.haomeiwen.com/i6268972/44ca0c4ea6e670d0.png)
动态绑定对象的属性类型
2.泛型的协变和逆变
--1.协变 利用 __covariant 关键字 修饰泛型
既<__covariant ObjectType>
__covariant 协变 关键字 用于泛型数据强转类型 可以向上强转,子类可以转成父类
声明泛型后,同类型指针相互赋值,但是其泛型指针指向对象不同会报出警告
![](https://img.haomeiwen.com/i6268972/24f3935dfee106c2.png)
这时,由于Dog 继承于Pet 所以可以 通过协变关键字 __covariant 进行子类向父类的协变
![](https://img.haomeiwen.com/i6268972/c105385435fd9dd4.png)
![](https://img.haomeiwen.com/i6268972/331c38fc4de5748f.png)
--2. __contravariant 逆变关键字 用于泛型数据强转类型 可以向下强转,父类可以转成子类
![](https://img.haomeiwen.com/i6268972/58d7d9d61ebdbd04.png)
使用同理