一.instancetype与id的异同
相同点:
1.都可以作为函数返回值的类型。
不同点:
1.instancetype只能作为函数返回值类型,而id还可以作为函数的参数类型,或是用来声明一个对象。
2.instancetype返回的是与函数所在类相同类型的对象, 而id表示的只是一个Objective-c对象
二.注意:
1.在类方法中以alloc, new开头的方法,在实例方法中以autorelease, self, retain, init会自动将返回值类型id改为instancetype(包含自定义的方法)
2.在定义简单构造函数中则不会将返回值id类型改为intancetype
三.使用instancetype的好处
对于
<span style="white-space:pre"> </span>NSString *str = [Person getInstance];
如果[Person getInstance] 返回值类型为 instancetype, 那么该行代码在编译器中会被警告,</span>
如果返回值类型为id, 那么我们在编译期间无法发现代码问题, 在运行时可能会发生crash。(因为OC是动态检测对象的真实类型)
四.总结
使用instancetype帮助加强代码的严谨性,如果方法是返回当前类的实例, 那么就请使用instancetype作为返回值类型。