instancetype
和 id
都是万能指针,指向对象。
- 1.
id
在编译的时候不能判断对象的真实类型,instancetype
在编译的时候可以判断对象的真实类型。 - 2.
id
可以用来定义变量,可以作为返回值类型,可以作为形参类型;instancetype
只能作为返回值类型。
在 ARC 环境下:
instancetype用来在编译期确定实例的类型,而使用id的话,编译器不检查类型, 运行时检查类型.
在 MRC 环境下:
instancetype 和 id 一样,不做具体类型检查
id可以作为方法的参数,但instancetype不可以
instancetype 只适用于初始化方法和便利构造器的返回值类型