id、instancetype和__kindof返回值类型

通常在我们定义静态方法,返回实例对象时,将返回值类型定义成instancetype,除了instancetype修饰外,还有id__kindof两种关键字,接下来简单介绍下三者的区别

  • id
    • 返回值为id类型
      • 坏处是不能在编译的时候检查真实类型,可以用任意类型接收,不会有任何警告
      • 在使用实例时无法使用点语法,归根结底还是因为类型
  • 指定具体类型
    • 返回值为指定的具体类型
      • 缺点是继承后,子类调用方法返回值仍然是父类方法中指定的类型
  • instancetype
    • 返回值为instancetype类型
      • 相对于id类型可以自动识别当前实例的类(应用于继承)
      • 缺点与id类似,在调用方法时,还是不能确定返回值真实类型,仍然可以使用任意类型接收
  • __kindof XXX类名 iOS 9 新增
    • 返回值为__kindof XXX类名当前类或者它的子类
      • 在调用的时候,通过编译器的智能提示可以直观的看到返回值具体类型

你可能感兴趣的:(id、instancetype和__kindof返回值类型)