使用instancetype有三点好处:
1、明确性。代码只做你让它做的事,而不是其他。
2、程式化。你会养成好习惯,这些习惯在某些时候会很有用,而且肯定有用武之地。
3、一致性。让代码可读性更好。
明确性
用instancetype代替id作为返回值的确没有技术上的好处。但这是因为编译器自动将id转化成了instancetype。你以为init返回的值类型是id,其实编译器返回了instancetype。
这两行代码对于编译器来说是一样的:
- (id)initWithBar:(NSInteger)bar;
- (instancetype)initWithBar:(NSInteger)bar;

但在你眼里,这两行代码却不同。你不该学着忽视它。
模式化
在使用init等方法时的确没有区别,但在定义简易构造函数时就有区别了。
这两行代码并不等价:
+ (id)fooWithBar:(NSInteger)bar;
+ (instancetype)fooWithBar:(NSInteger)bar;

如果用instancetype作为函数的返回类型,就不会出错。
一致性:
最后,想象把所有东西放到一起时的情景:你想要一个init方法和一个简易构造函数。
如果你用id来作为init函数的返回类型,最终代码如下:
- (id)initWithBar:(NSInteger)bar;
+ (instancetype)fooWithBar:(NSInteger)bar;

但如果你用instancetype,代码如下:
- (instancetype)initWithBar:(NSInteger)bar;
+ (instancetype)fooWithBar:(NSInteger)bar;

代码更加一致,可读性更强。它们返回相同的东西,这一点一目了然。

转载于:https://www.cnblogs.com/Hungrier/p/5130415.html

关于instancetype代替id的使用区别相关推荐

  1. (转)Objective-C中的instancetype和id区别

    有一个相同两个不同.相同 Written by Mattt Thompson on Dec 10th, 2012Objective-C is a rapidly evolving language, ...

  2. instancetype和id的区别

    一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以 ...

  3. Objective-C中的instancetype和id区别

    有一个相同两个不同.相同 Written by Mattt Thompson on Dec 10th, 2012 Objective-C is a rapidly evolving language, ...

  4. 转载:Objective-C中的 instancetype 和 id 关键字

    Objective-C中的instancetype和id关键字 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/16994 ...

  5. Objective-C中的instancetype和id关键字

    作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/16994913 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关 ...

  6. html:(27):类和ID选择器的区别和子选择器

    类和ID选择器的区别 学习了类选择器和ID选择器,我们会发现他们之间有很多的相似处,是不是两者可以通用呢?我们不要着急先来总结一下他们的相同点和不同点: 相同点:可以应用于任何元素 不同点: 1.ID ...

  7. instancetype 与 id for Objective-C

    instancetype vs id for Objective-C 新的LLVM编译器为我们带来了ARC, Object Literal and Scripting, Auto Synthesis等 ...

  8. IC卡与ID卡的区别

    IC卡与ID卡的区别 射频IC卡按照使用功能分为身份识别ID 卡.消费的IC卡.物流标记卡.远距离识别卡. 目前,许多一卡通的项目,但对于是采用IC卡,还是采用ID卡做一卡通的问题上,还存在着很大的疑 ...

  9. (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

    Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...

最新文章

  1. 关于字符编码 转自廖雪峰的官方网站,至今看到最清晰的讲解
  2. spring面试重点
  3. 用C语言写的万年历---亲手写的。好累哦
  4. linux下kvm设备配置,Linux下为KVM 配置桥接设备
  5. 【手写系列】理解数据库连接池底层原理之手写实现
  6. 牛客练习赛26 D xor序列 (线性基)
  7. 无限流量手机怎样改服务器,无限流量手机服务器
  8. vue-router配置
  9. Octave获取使用imnoise函数
  10. 互联网最强的下载工具:IDM
  11. TABLEAU教程2
  12. esp8266教程:开发方式和SDK选择
  13. 针对Linux学习,值得阅读的五本书籍,不看可能错失机会
  14. 运动目标检测算法ViBe原理学习
  15. 小米路由r2d论坛_小米路由器R2D拆机换3T紫盘
  16. MATLAB学习笔记(二)——数据及其运算
  17. python图片自动上色_自己实现黑白图片自动上色AI(一)
  18. 游戏服务器架构演化史
  19. 公众平台--扫描微信二维码,关注后自动登录
  20. 三阶行列式简便算法_三阶行列式是什么?如何计算?

热门文章

  1. GraphPad Prism软件无响应问题解决办法
  2. GraphPad Prism 平均值的标准误差
  3. AWS EC2服务器连接登录与创建多账号供多人同时并发使用
  4. C++大学教程(第九版)2016-07 保罗·戴特尔 (Paul Deitel)、 哈维·戴特尔 (Harvey Deitel)_cafbe(C++中文版)
  5. 声学漫谈之五:音腔是怎么影响声音效果的
  6. exists的用法 python_10 个 Python 开发技巧
  7. access开发精要(11)-对象命名规定
  8. mxnet基础到提高(35)-ndarray
  9. 【数据竞赛】可能是全网特征工程实操最通透的...
  10. 【推荐系统】深入理解推荐系统:无需人工特征工程的xDeepFM