为什么苹果要推出泛型
1.迎合swift
2.泛型作用:限制类型
泛型好处:
1.提示开发者集合中是什么类型,提高代码规范,减少程序员之间交流
2.从集合(数组,字典,NSSet)中取出来元素可以使用点语法
泛型声明格式:在声明类型的时候,声明泛型,在类型后面<泛型名称>
泛型定义格式:使用类型才叫定义,类型<限制类型>
泛型:仅仅是报警告
id不能使用点语法
什么样的类型才可以使用泛型?为什么集合可以使用泛型?
只有集合才可以使用泛型,其他类型暂时不支持?
定义泛型,必须要先声明泛型
开发场景:
声明一个类,有些属性或者方法类型不确定,但是在使用这个类,就能很清楚知道这个对象中属性或者方法是什么类型
Java,iOS
需求:声明一个人类,在声明的时候并不知道可以做什么事情,但是创建人对象,就知道让这个人做什么事情
泛型开发场景:限制集合
书写格式:
Person.h Language.h iOS.h Java.h
iOS *ios = [[iOS alloc] init];
Java *java = [[Java alloc] init];
// iOS
Person<iOS *> *p = [[Person alloc] init];
p.language = ios;
// Java
Person<Java *> *p1 = [[Person alloc] init];
p1.language = java;
协变和逆变用于继承类型转换,子类转父类
__covariant(协变):子类转父类
__contravariant(逆变):父类转子类