通常在我们定义静态方法,返回实例对象时,将返回值类型定义成instancetype,除了instancetype修饰外,还有id和__kindof两种关键字,接下来简单介绍下三者的区别
-
id- 返回值为
id类型- 坏处是不能在编译的时候检查真实类型,可以用任意类型接收,不会有任何警告
- 在使用实例时无法使用点语法,归根结底还是因为类型
- 返回值为
-
指定具体类型- 返回值为指定的具体类型
- 缺点是继承后,子类调用方法返回值仍然是父类方法中指定的类型
- 返回值为指定的具体类型
-
instancetype- 返回值为
instancetype类型- 相对于
id类型可以自动识别当前实例的类(应用于继承) - 缺点与
id类似,在调用方法时,还是不能确定返回值真实类型,仍然可以使用任意类型接收
- 相对于
- 返回值为
-
__kindof XXX类名iOS 9 新增- 返回值为
__kindof XXX类名当前类或者它的子类- 在调用的时候,通过编译器的智能提示可以直观的看到返回值具体类型
- 返回值为