【iOS】instancetype与id的区别

来源:互联网 发布:淘宝买药货到付款给谁 编辑:程序博客网 时间:2024/05/16 07:12

一.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作为返回值类型

1 0