< Objective-C >id与instancetype

相同点:

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

不同点:

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

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

好处:

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

[[[NSArray alloc] init] mediaPlaybackAllowsAirPlay];

返回类型为instancetype:由于[[NSArray alloc]init]的返回值是NSArray*,这样编译器就能够根据返回的数据类型检测出NSArray是否实现mediaPlaybackAllowsAirPlay方法。有利于开发者在编译阶段发现错误。

[[NSArray array] mediaPlaybackAllowsAirPlay];

返回类型为id:[NSArray array]返回的是id类型,编译器不知道id类型的对象是否实现了mediaPlaybackAllowsAirPlay方法,也就不能够替开发者及时发现错误。

时间: 2024-11-06 15:08:25

< Objective-C >id与instancetype的相关文章

id和instancetype的异同

相同点: 都可以作为方法返回值类型 在initWithName:方法中是一样的,例如: - (id)initWithName:(NSString *)name; - (instancetype)initWithName:(NSString *)name; 编译器在编译时直接将id转换成instancetype类型 不同点: 1.instancetype只能作为返回值类型,不能像id一样作为参数类型; 2.作为返回值类型时,在自定义方法中也有不同之处 + (id)constructAnArray;

id 和 instancetype 方法的区别

首先明确 id 和 instancetype 都是万能指针,都能指向一个对象:(instancetype == id == 万能指针 == 指向一个对象) 主要区别亮点: 1. id 在编译时候不能判断对象的真是类型,但是instancetype 编译的时候可以判断对象真是类型,这样的话,编写代码时候,如果类型指错,instancetype可以告警.我们应该尽量把告警暴露在编译的时候. 2.另外  instancetype 只能用来做返回值,不能和id一样定义变量. // id在编译的时候不能判

iOS开发中id、NSObject *、id、instancetype四者有什么区别?

在使用Objective-C语言进行iOS应用开发的时候,常常会涉及到id.NSObject *.id.instancetype这四个概念的使用,但这四者也是iOS初学者最易混淆的内容,下面小编看了一些iOS开发教程和文档,搜罗了他们的不同用法,分享给大家,一起来看看吧. 1. id与NSObject * (1)id是Objective-C对象,但是并不一定是NSObject对象,并非所有的Foundation/Cocoa对象都是继承于NSObject对象的,比如NSProxy.同时,id与NS

id 和 instancetype

静态数据类型 默认情况下所有的数据类型都是静态数据类型 静态数据类型的特点: 1 在编译时就知道变量的类型 2 知道变量中有哪些属性和方法 3 在编译的时候就可以访问这些属性和方法 4 并且如果是通过静态数据类型定义变量,如果访问了不属于静态数据类型的属性和方法,那么编译器就会报错 动态数据类型 id 是一个动态数据类型 动态数据类型的特点 1 在编译的时候编译器并不知道变量的真实类型,只有在运行的时候才知道它的真实类型 2 并且如果通过动态数据类型定义变量,如果访问了不属于动态类型的属性和方法

id和instancetype区别

id和instancetype区别 作用 instancetype:可以返回明确的类型,但不能作为参数类型. id:可以用来表示变量和方法参数的类型.如果程序运行时无法确定一个对象的类型,就可以将该对象声明为id. 异同 1.相同点 都可以作为方法的返回类型 2.不同点 instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象: instancetype只能作为返回值,不能像id那样作为参数 推荐用法 作为返回值时,使用instancetype. 作为参数时,只能使

【iOS开发-48】九宫格布局案例:自动布局、字典转模型运用、id和instancetype区别、xib重复视图运用及与nib关系

本次九宫格案例: (1)导入app.plist和各种图片素材,方便后续开发.实际开发中,也是如此. (2)把plist中数组导入进来. --因为本案例中app.plist最终是一个数组,数组里面是字典.所以我们需要一个数组类型来接受这个plist文件. --我们利用之前掌握的在变量的getter中进行延迟加载数据. #import "ViewController.h" @interface ViewController () @property(nonatomic,strong) NS

【iOS开发-48】九宫格布局案例:自己主动布局、字典转模型运用、id和instancetype差别、xib反复视图运用及与nib关系

本次九宫格案例: (1)导入app.plist和各种图片素材,方便兴许开发.实际开发中,也是如此. (2)把plist中数组导入进来. --由于本案例中app.plist终于是一个数组,数组里面是字典.所以我们须要一个数组类型来接受这个plist文件. --我们利用之前掌握的在变量的getter中进行延迟载入数据. #import "ViewController.h" @interface ViewController () @property(nonatomic,strong) NS

id 和 instancetype 的区别

1.什么是 instancetype?同 id 一样,都是表示未知类型的对象. 2.关联返回类型的方法根据 Cocoa 规则, 满足下列规则的方法:1.类方法中,以 alloc 或 new 开头.2.实例方法中,以 autorelease,init,retain或 self 开头的这些方法,会返回一个所在类类型的对象,这些方法就被称为是关联返回类型的方法.以代码为例:@interface NSObject+ (id)alloc;- (id)init;@end @interface NSArray

id instancetype NSObject *的区别

1.instancetype只能用于方法的返回类型,而id用处和NSObject *类似. 2.instancetype会告诉编译器当前的类型,这点和NSObject *类似,但id对于编译器却是无类型的,调用任何方法不会给出错误提示. 3.对于init方法,id和instancetype是没有区别的.因为编译器会把id优化成instancetype.当明确返回的类型就是当前Class时,使用instancetype能避免id带来的编译不出的错误情况. 4.NSObject Class和id都是