OC语言 - id | instancetype
前言
1 - 动态数据类型的特点
① 在编译的时编译器并不知道变量的真实类型,只有在运行时才知道它的真实类型
② 在编译阶段,即使访问了不属于动态类型数据的属性和方法,编译器也不会报错
id
1 - 它是一种动态数据类型,也是万能指针,能够指向或操作任何对象
1 Typedef struct objc object{ 2 Class isa; 3 } *id;
2 - id 也常用来定义变量、作为返回值、用作参数
① 坏处:在运行阶段如果调用了一个不存在的方法,编译器会马上报错!编译阶段无法发现语法错误,可读性不高
② 好处:灵活,可以指向任何对象类型;编译阶段不指向任何类型
instancetype
1 - instancetype、id 都是万能指针,指向一个对象。而 instancetype 在编译的时候,就会判断对象的真实类型
2 - instancetype 在错误检查机制上更优于 id。因为 instancetype 能够在无关联返回类型中明确地返回该对象的类型,因此更利于开发者检测到无关联返回类型中的错误。而 id 返回的是未知类型,在无关联返回类型中检错时没有 instancetype 更易于查错
小结
1 - 但凡自定义的构造方法,返回值尽量使用 instancetype且它只能用于作为返回值
2 - 尽量不要把 id 当做返回值来使用
分类:
OC语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)