【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带来的编译不出错误的情况。

 

posted @ 2022-08-03 14:11  Jerry2km1  阅读(322)  评论(0)    收藏  举报