一、什么是instancetype
instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象。我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢?
二、关联返回类型(related result types)
根据Cocoa的命名规则,满足下述规则的方法:
1、类方法中,以alloc或new开头
2、实例方法中,以autorelease,init,retain或self开头
会返回一个方法所在类类型的对象,这些方法就被称为是关联返回类型的方法。换句话说,这些方法的返回结果以方法所在的类为类型,说的有点绕口,请看下面的例子:
当我们使用如下方式初始化NSArray时:
- @interface NSObject
- + (id)alloc;
- - (id)init;
- @end
- @interface NSArray : NSObject
- @end
按照Cocoa的命名规则,语句[NSArray alloc] 的类型就是NSArray*因为alloc的返回类型属于关联返回类型。同样,[[NSArray alloc]init] 的返回结果也是NSArray*。
- NSArray *array = [[NSArray alloc] init];
三、instancetype作用
1、作用
如果一个不是关联返回类型的方法,如下:
- @interface NSArray
- + (id)constructAnArray;
- @end
当我们使用如下方式初始化NSArray时:
根据Cocoa的方法命名规范,得到的返回类型就和方法声明的返回类型一样,是id。
- [NSArray constructAnArray];
但是如果使用instancetype作为返回类型,如下:
当使用相同方式初始化NSArray时:
- @interface NSArray
- + (instancetype)constructAnArray;
- @end
得到的返回类型和方法所在类的类型相同,是NSArray*!
- [NSArray constructAnArray];
总结一下,instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!
2、好处
能够确定对象的类型,能够帮助编译器更好的为我们定位代码书写问题,比如:
上例中第一行代码,由于[[NSArray alloc]init]的结果是NSArray*,这样编译器就能够根据返回的数据类型检测出NSArray是否实现mediaPlaybackAllowsAirPlay方法。有利于开发者在编译阶段发现错误。
- [[[NSArray alloc] init] mediaPlaybackAllowsAirPlay]; // "No visible @interface for `NSArray` declares the selector `mediaPlaybackAllowsAirPlay`"
- [[NSArray array] mediaPlaybackAllowsAirPlay]; // (No error)
第二行代码,由于array不属于关联返回类型方法,[NSArray array]返回的是id类型,编译器不知道id类型的对象是否实现了mediaPlaybackAllowsAirPlay方法,也就不能够替开发者及时发现错误。
四、instancetype和id的异同
1、相同点
都可以作为方法的返回类型
2、不同点
①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
②instancetype只能作为返回值,不能像id那样作为参数,比如下面的写法:
就是错的,应该写成:
- //err,expected a type
- - (void)setValue:(instancetype)value
- {
- //do something
- }
- - (void)setValue:(id)value
- {
- //do something
- }
相关推荐
保姆级教程:在寒武纪MLU370上从零部署YOLOv5(附安全帽数据集)
本文提供在寒武纪MLU370上从零部署YOLOv5的保姆级教程,涵盖环境配置、模型迁移、安全帽数据集处理、训练优化及推理部署全流程。通过实战案例展示MLU370在目标检测任务中的高效性能,适合开发者快速掌握国产AI加速卡的应用技巧。
typescript里的 InstanceType
是 TypeScript 的内置工具类型,用于获取某个构造函数类型的实例类型。是一个内置的工具类型,用于获取一个类的实例类型。函数的作用是接收一个类作为参数,然后创建并返回这个类的一个新实例。这部分是 TypeScript 中的构造签名,表示一个可以用。运算符调用的函数,其参数为任意类型的数组,返回值也是任意类型。构造的类型),其构造函数可以接收任意数量和类型的参数(函数可以接受任何类,然后返回一个该类的新实例。类的实例类型,所以你可以创建一个新的。,然后返回这个类型的实例。必须是一个类(或者说是可被。
致远OA公文管理模块相关操作
致远oa协同办公系统 公文管理模板 相关操作
oc——类——instancetype
instancetype 在一些对象创建和初始化方法中,常看到方法返回类型为instancetype,比如NSObject中 + (instancetype)new OBJC_SWIFT_UNAVAILABLE("use object initializers instead"); + (instancetype)allocWithZone:(struct _NSZone *)zone OBJC_SWIFT_UNAVAILABLE("use object initializers instead"); +
HDR视频技术之七:逆色调映射
HDR 技术说是继 4K 之后视频领域的又一次重大技术突破,不仅提高图像的动态范围,同时也提供了更宽的色域,并提升了画面在高光和暗部的细节信息,带给观看者更加真实的视觉体验。但作为 HDR 产业链的核心,内容短缺的问题仍然是 HDR 普及和成熟的重要限制因素。众多电视厂商将 HDR 技术作为其产品规划中的重要技术,主要是在硬件方面进行提升。而由于 HDR 内容制作对于设备要求较高,对采集、调色、显示等多方面都需要较高的质量要求,内容制作的复杂度和周期长等因素,导致了 HDR 内容的匮乏。
基于Simulink的加速度计振动分析:单自由度质量-弹簧-阻尼系统
摘要:基于Simulink的加速度计单自由度振动分析 本文研究了加速度计的单自由度(SDOF)质量-弹簧-阻尼系统模型,通过MATLAB/Simulink平台建立了完整的振动分析仿真系统。文章详细阐述了理论建模过程,推导了系统运动微分方程和传递函数,并提供了Simulink模型搭建的具体步骤和MATLAB实现代码。研究通过正弦扫频、随机振动和冲击响应三种典型输入信号,分析了系统的幅频特性、相频特性及时域响应,验证了加速度计的工作机理。仿真结果表明,该方法能有效模拟加速度计在不同激励条件下的动态特性,为传感器
Objective-C中的instancetype和id关键字
一、什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象。我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? 二、关联返回类型(related result types) 根据Cocoa的命名规则,满足下述规则的方法: 1、类方法中,以alloc或new开头 2、实例方法中,以autorelease,init,retain或self开头 会返回一个
【知识分享】车载以太网PCB布局设计指南
本文将深入探讨在设计车载以太网设备的印刷电路板(PCB)时需要着重考虑的若干关键主题。这些主题广泛涵盖了数据布线设计,以确保其符合信号完整性(SI)和电磁兼容性(EMC)标准;外部元器件的合理摆放;以及采取有效的抗电磁干扰(EMI)布局策略等方面。通过全面且细致地处理这些关键环节,能够显著提升车载以太网设备的性能与可靠性。
iOS instancetype 和 id 区别详解
和id都是在iOS开发中处理对象引用的重要类型。提供了类型安全性和编译时检查,特别适用于方法返回类型和泛型容器。相比之下,id是一种通用的动态类型,适用于任何Objective-C对象,但需要在运行时进行类型检查和转换。根据具体的场景和需求,选择合适的类型来确保代码的安全性和可维护性。希望本文详细的解释和实际案例有助于你更好地理解和使用和id,并在iOS开发中编写高质量的代码。
【2026OD新机考】【不定滑窗】20260415-API请求日志去重分析【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
中找到所有的连续的相同元素,同时统计对应的连续相同元素对应的值的平均值。:当右指针为第一个元素(没有前一个元素),或者右指针对应的元素。某微服务系统的日志监控平台需分析API调用记录,日志含大量。相等,说明当前元素仍然属于同一个相同元素窗口,将当前元素值。中的所有元素均相等,并且计算窗口和情况即可。请实现一个函数,对给定的日志数据去重合并处理。位置,表示开启一个新的窗口,此时需要重置窗口和。,为了优化重复的请求记录,存储和后续分析需对。:对应的响应时间数组(毫秒)。重新置为当前右指针的元素值。
C++(Qt)软件调试---Windows下Qt使用dump定位崩溃位置(1)
在C++/Qt程序崩溃时,往往很难找到崩溃的原因,如果是稳定复现的问题还好,但是多数情况遇见的问题是随机出现的,这时想要快速找到问题并解决就需要通过dump文件定位崩溃位置。
id 和instancetype区别
一句话总结:id可以作为参数也可以返回未知类型的对象 instancetype只可以返回和方法所在类相同类型的对象(非关联返回类型返回方法所在类的类型) 下面细说 一、什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象。我们都知道未知类型的的对象可以用id关
一文读懂 STAR-CCM+:多物理场仿真王者,从入门到精通全攻略(附实战路线)
STAR-CCM+是西门子旗下的多物理场仿真平台,集流体、传热、结构、电磁等耦合求解于一体。其核心优势包括:全自动网格处理技术(支持十亿级网格)、多物理场无缝耦合、CPU/GPU并行加速计算、流程自动化与设计探索等。广泛应用于汽车(空气动力学优化、电池热管理)、航空航天(气动设计、发动机仿真)、能源(风电叶片流固耦合)、电子(芯片散热)等行业。相比ANSYS Fluent和OpenFOAM,STAR-CCM+在多物理场耦合和复杂几何处理方面更具优势,适合工业级高精度仿真需求。学习路径建议从基础操作入手,逐步
instancetype和id的区别
一、什么是instancetypeinstancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象。我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? 二、关联返回类型(related result types)根据Cocoa的命名规则,满足下述规则的方法:1、类方法中,以all
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
instancetype id区别
一、什么是instancetypeinstancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象。我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? 二、关联返回类型(related result types)根据Cocoa的命名规则,满足下述规则的方法:1、类方法中,以alloc或
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
iOS instancetype和id区别
instanctype和id的区别
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
89、instancetype和id的区别
1>instancetype在类型表示上,跟id一样,可以表示任何对象类型 2>instancetype只能用在返回值类型上,不能像id一样用在参数类型上 3>instancetype比id多一个好处:编译器会检测instancetype的真实类型 第3点的解释: 在下面这种情况下 // Person.m文件里 + (id)person{ return ...
id和instancetype的区别
id和instancetype的区别区别1:类型确定的时期 在ARC(Auto Reference Count)环境下:instancetype:编译期确定类型。id类型:运行时确定类型。 在MRC(Manual Reference Count)环境下: instancetype和id一样,不做具体类型检查。区别2:作为方法参数id可以作为方法的参数,但instancetype不可以。ins
id、NSObject *、id<NSObject>、instancetype的区别
1. id 与 NSObject * (1) id 是 Objective-C 对象,但是并不一定是NSObject对象,并非所有的Foundation/Cocoa对象都是继承于NSObject对象的,比如NSProxy。同时,id与NSObject对象之间有很多的共同方法,比如retain与release等方法。更一步来说:所有的对象本质来说都是 id 类型的。 (2) 对于id来说,你可以
id 和 instancetype 方法的区别
首先明确 id 和 instancetype 都是万能指针,都能指向一个对象:(instancetype == id == 万能指针 == 指向一个对象) 主要区别亮点: 1. id 在编译时候不能判断对象的真是类型,但是instancetype 编译的时候可以判断对象真是类型,这样的话,编写代码时候,如果类型指错,instancetype可以告警。我们应该尽量把告警暴露在编译的时候...
id instancetype NSObject *的区别
id和instancetype都可以做方法的返回值。 id类型的返回值在编译期不能判断对象的真实类型,即非关联返回类型,instancetype类型的返回值在编译期可以判断对象的真实类型,即关联返回类型。 id可以用来定义变量, 可以作为返回值, 可以作为形参,instancetype只能用于作为返回值。 使用id修饰的对象是动态类型,编译器在编译期不会去判断其真...
id和instancetype区别
id、instancetype idinstancetype总结 id 一个类的实例的指针,万能指针 申明 typedef struct objc_object *id; instancetype 使用instancetype关键字作为方法的返回值代表返回当前类或者当前类的子类的实例.相应的方法有alloc,init以及便利构造方法 在恰当的地方使用instancet
iOS instancetype 跟 id 的区别
instancetype:在类型表示上,跟id一样,可以表示任何数据类型; instancetype只能用在返回值类型上,不能像id一样用在参数类型上; instancetype比id多一个好处:编译器会检测instancetype的真实类型.
189



被折叠的 条评论
为什么被折叠?



