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 2018-09-10 20:45  低头捡石頭  阅读(57)  评论(0编辑  收藏  举报

导航