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 当做返回值来使用

 

posted on   低头捡石頭  阅读(59)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示