iOS中id与instancetype的区别

news/2024/7/20 21:08:08 标签: ios, objective-c

关联返回类型与非关联返回类型

  • 关联性返回类型

根据Cocoa的命名规则,满足下述规则的方法:
(1)类方法中,以alloc或new开头
(2)实例方法中,以autorelease,init,retain或self开头
会返回一个方法所在类类型的对象,这些方法就被称为是关联返回类型的方法。换句话说,这些方法的返回结果以方法所在的类为类型。

例如:

objective-c">@interface NSObject  
+ (id)alloc;  
- (id)init;  
@end

[NSArray alloc]与[[NSArray alloc]init]返回的都为NSArray的对象。

  • 非关联返回类型
objective-c">@interface NSArray  
+ (id)constructAnArray;  
@end


[NSArray constructAnArray];

根据Cocoa的方法命名规范,得到的返回类型就和方法声明的返回类型一样,是id。

但是如果使用instancetype作为返回类型,如下:

objective-c">@interface NSArray  
+ (instancetype)constructAnArray;  
@end
/

[NSArray constructAnArray];

此时返回类型和方法所在类型相同。

instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!

两者之间的区别

  • id在编译的时候不能判断对象的真是类型

    instancetype在编译的时候可以判断对象的真是类型。

  • 如果init方法的返回值是instancetype,那么将返回值赋值给一个其他的对象汇报一个警告。

    如果是在以前, init的返回值是id,那么将init返回的对象地址赋值给其它对象是不会报错的

  • id可以用作定义变量,也可做返回值,也可以作为形参传入。但是instancetype只能作为返回值。


http://www.niftyadmin.cn/n/4961851.html

相关文章

KMP算法,用java实现的三种方法

暴力解决 package 经典算法的实现.KMP算法;public class 暴力解决 {public int strStr(String haystack, String needle) {/*我们可以让字符串 needle 与字符串 haystack的所有长度为 m 的子串均匹配一次。为了减少不必要的匹配,我们每次匹配失败即立刻停止当前子串…

国内智慧工业的实践,在一首曙光《长歌行》中

工业是国民经济的主战场,是经济命脉。因此,智慧工业也被认为是第四次工业革命的关键。 但提到中国智慧工业,不禁让人脑海中浮现出一首《长歌行》。 一方面,智慧工业的实现周期很长,AI算力、算法等新技术进入工业领域所…

【Terraform学习】使用 Terraform 将 EC2 实例作为 Web 服务器启动(Terraform-AWS最佳实战学习)

使用 Terraform 将 EC2 实例作为 Web 服务器启动 实验步骤 前提条件 安装 Terraform: 地址 下载仓库代码模版 本实验代码位于 task_ec2 文件夹中。 变量文件 variables.tf 在上面的代码中,您将声明,aws_access_key,aws_secr…

【学会动态规划】摆动序列(27)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

原型链继承的缺点

记录一下原型链继承的缺点: 第一点是实例共享属性的问题,如果实例改变了继承的引用类型属性,那么其他实例属性也会被改变 第二点是实例对象的 constructor 属性不正确。child 的 constructor 属性并未指向它自己的构造函数 继承代码如下 …

斯里兰卡生态系统服务价值量计算

斯里兰卡生态服务价值计算 一、引言 生态系统服务价值是指人类间接或直接从生态系统各服务功能中获得的收益,对人类社会福祉起着极其重要的贡献。生态系统服务价值核算作为一项基础性研究工作,对生态安全格局的构建、生态补偿以及生态文明建设等研究有重…

Mybatis动态之灵活使用

目录 ​编辑 1.MyBatis中的动态SQL是什么? 2.MyBatis中的动态SQL作用 3.代码演示 4. #和 $使用 2.1 #使用 ( 1 ) #占位符语法 ( 2 ) #优点#占位符语法在使用动态SQL时具有以下优点: 2.2 $使用 ( 1 ) $占位符语法 ( 2 ) $优点$占位符语法在使用动…

武汉凯迪正大—变比组别测试仪

一、概述 在电力变压器的半成品、成品生产过程中,新安装的变压器投入运行之前以及根据国家电力部的预防性试验规程中,要求变压器进行匝数比或电压比测试。传统的变比电桥操作繁琐,读数不直观,且要进行必要的换算,测试时…