【Objective-C】OC中instancetype和id的区别
instancetype意思为实例化,instancetype与和id一样,都可以指向一个继承了Object(或者NSObject)类的对象。
区别在于:instancetype只能作为方法返回值,会返回该方法所在的类的实例化对象,所以instancetype被称为关联返回类型。
使用instancetype会在编译时进行类型检查,有利于开发者在编译阶段发现错误。
根据 Cocoa 的命名规则,满足下述命名规则的方法应该返回该方法所在类的实例化对象,这些方法被称为是关联返回类型的方法:
以 alloc 或 new 开头的类方法
以 autorelease、init、retain 或 self 开头的实例方法。
一、什么是instancetype
instancetype是clang 3.5开始提供的一个关键字,表示某个方法返回的未知类型的OC对象。
之前就接触过关键字id也可以用来表示未知类型的对象,那这两个有什么区别呢?
二、id和instancetype的区别
区别一
·instancetype用来在编译期确定实例的类型
·id在编译时期编译器不检查类型,只能返回未知类型的对象,调用任何方法不会给出错误提示
区别二
·instancetype只能作为返回值
·id既可以作为返回值也可以作为参数
区别三
·对于init方法,id和instancetype是没有区别的,因为编译器会把id优化成instancetype,当明确返回类型就是当前class时,使用instancetype能避免id带来的编译不出错误的情况。

浙公网安备 33010602011771号