对于Objective-C初学者而言,用instancetype和id来定义一个简易的构造函数,到底区别在哪?

在接触OC语言一段时间后,我们大家都知道未知类型的对象可以用 id 表示,那么 instancetype 是用来干嘛的?

1.instancetype的作用

就是使那些非关联返回类型的方法返回所在类的类型

2.使用instancetype好处

a.能够确定对象的类型,能够帮助编译器更好的为我们定位代码书写问题

b.编译器能够根据返回的数据类型检测是否实现方法,有利于开发者在编译阶段发现错误。

3.instancetype和id的异同

a.相同点

都可以作为方法的返回类型

b.不同点

①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;

②instancetype只能作为返回值,不能像id那样作为参数

3.总结:虽然用instancetype代替id作为返回值的确没有技术上的好处,这是因为编译器自动将id转化成了instancetype。初学者会以为init返回的值类型是id,其实编译器返回的是instancetype。

最后借用别人总结的九个字去概括上面所有的结论,使用instancetype有三点好处:明确性 程式化 一致性。

时间: 2024-08-26 07:27:41

对于Objective-C初学者而言,用instancetype和id来定义一个简易的构造函数,到底区别在哪?的相关文章

iOS instancetype和id的区别

区别: 1>instancetype在类型表示上,跟id一样,可以表示任何对象类型 2>instancetype只能用在返回值类型上,不能像id一样用在参数类型上 3>instancetype比id多一个好处:编译器会检测instancetype的真实类型 第3点的解释: 在下面这种情况下 // Person.m文件里 + (id)person{ return [[self alloc] init]; } // mainViewController.m,下面这行代码,用字符串类型的指针指

instancetype与id

?instancetype在类型表示上,跟id一样,可以表示任何对象类型 ?instancetype只能用在返回值类型上,不能像id一样用在参数类型上 ?instancetype比id多一个好处:编译器会检测instancetype的真实类型 instancetype与id,布布扣,bubuko.com

iOS instancetype 跟 id 的区别

instancetype:在类型表示上,跟id一样,可以表示任何数据类型; instancetype只能用在返回值类型上,不能像id一样用在参数类型上; instancetype比id多一个好处:编译器会检测instancetype的真实类型.

【iOS入门】instancetype和id的区别

区别1: 在ARC(Auto Reference Count)环境下: instancetype用来在编译期确定实例的类型,而使用id的话,编译器不检查类型, 运行时检查类型. 在MRC(Manual Reference Count)环境下: instancetype和id一样,不做具体类型检查 区别2: id可以作为方法的参数,但instancetype不可以 instancetype只适用于初始化方法和便利构造器的返回值类型 作者:三木成森链接:https://www.jianshu.com

iOS 用instancetype代替id作返回类型有什么好处?

2014-07-07更新:苹果在iOS 8中全面使用instancetype代替id Steven Fisher:只要一个类返回自身的实例,用instancetype就有好处. @interface Foo:NSObject - (id)initWithBar:(NSInteger)bar; // initializer + (id)fooWithBar:(NSInteger)bar; // convenience constructor @end 对于简易构造函数(convenience co

[iOS]用instancetype代替id作返回类型有什么好处?(转)

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:管策链接:http://zhuanlan.zhihu.com/Foundation/19569459来源:知乎 2014-07-07更新:苹果在iOS 8中全面使用instancetype代替id Steven Fisher:只要一个类返回自身的实例,用instancetype就有好处. @interface Foo:NSObject - (id)initWithBar:(NSInteger)bar; // initial

instancetype VS id

英文好的直接读下面链接的文章就好了: http://stackoverflow.com/questions/8972221/would-it-be-beneficial-to-begin-using-instancetype-instead-of-id https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernO

instancetype和id的区别

一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? 二.关联返回类型(related result types) 根据Cocoa的命名规则,满足下述规则的方法: 1.类方法中,以alloc或new开头 2.实例方法中,以autorelease,init,retain或self开头 会

(转)Objective-C中的instancetype和id关键字

作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/16994913 一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? 二.关联返回类型(related result types) 根据Cocoa的命名规则,