instancetype和id的区别
来源:互联网 发布:国产机器人仿真软件 编辑:程序博客网 时间:2024/05/16 23:01
instancetype 是只能作为返回值而不能作为参数的。
当一个类返回相同类的实例的时候使用 instancetype 是合适的。
对于编译器来说以下两个是一样的,因为编译器会将①自动转换为②
①-(id)init;
但如果不是init(非关联返回类型)的话结果就不一样了
① +(id)buildInstance;(返回的还是id类型)
②+(instancetype) buildInstance; (返回的是instancetype类型)
下面放一个例子
但如果把-(id)buildInstance;改为-(instancetype)buildInstance;
当一个类返回相同类的实例的时候使用 instancetype 是合适的。
对于编译器来说以下两个是一样的,因为编译器会将①自动转换为②
①-(id)init;
②-(instancetype)init;
即关联返回类型会被编译器自动转换:
1、类方法中,以alloc或new开头
2、实例方法中,以autorelease,init,retain或self开头
但如果不是init(非关联返回类型)的话结果就不一样了
① +(id)buildInstance;(返回的还是id类型)
②+(instancetype) buildInstance; (返回的是instancetype类型)
下面放一个例子
@interface Foo : NSObject+(id)buildInstance;(非关联返回类型方法)-(id)init;(关联返回类型方法)@end@implementation Foo+(id)buildInstance{ return [[self alloc] init];}-(id)init{ return [super init];}@end
@interface Bar : Foo- (void)doSometingElse;@end@implementation Bar- (void)doSometingElse {}@end
[[[Foo alloc] init] doSometingElse];//返回的是foo类的实例,因为编译器会自动把id转换为instancetype,所以会有警告说无dosometingelse方法[[[Bar alloc] init] doSometingElse];//返回的是bar类的实例[[Foo buildInstance] doSometingElse];//返回的可以是bar类的实例,因为不是init编译器不会把id转换为instancetype,所以不会有警告[[Bar buildInstance] doSometingElse];//返回的是bar类的实例
但如果把-(id)buildInstance;改为-(instancetype)buildInstance;
则[[Foo buildInstance] doSometingElse];会有警告,因为返回的是foo类的实例,无dosometingelse方法
新人就是想写写博客,所以只是学习一下别人的文章怎么写,勿喷,参考文章:点击打开链接
0 0
- instancetype和id的区别
- instancetype和id的区别
- instancetype和id的区别
- instancetype 和id的区别
- instancetype 和 id 的区别
- instancetype和id的区别
- id 和 instancetype 的区别
- id 和instancetype的区别
- instancetype和id的区别
- instancetype和id的区别
- instancetype和id的区别
- instancetype和id的区别
- id和instancetype的区别
- instancetype 和 id 的区别
- instancetype和id的区别
- instancetype 和 id 的区别
- instancetype 和 id的区别
- id和instancetype的区别
- git clone 远程分支
- SEO如何提高百度权重
- OpenCV+win7+VS2010环境搭建
- divide and conquer
- qt里button相关
- instancetype和id的区别
- 面试经验以及职位要求--Java开发(不知道是哪个学长的经验了)
- python 服务器 select 游戏
- 分页SQL走全表扫描导致TEMP耗尽
- C++无法解析的外部符号的3种可能
- Python Tkinter Hello,Tkinter
- NSString asscii格式(2进制) 转 utf8格式——解决iOS自己处理http socket数据,遇到Transfer-Encoding: chunked时
- qt定时器
- 使用 Python 的 jsonschema 对 json 做验证