iOS之id和NSObject *的区别

2020-10-16  本文已影响0人  无极战思

1.idobjc.h中定义

  typedef struct objc_class *Class;
  typedef struct objc_object {
  Class isa;
  } *id;

从上面可以看出,id本质是struct objc_object结构体指针,可以指向任何OC对象。
注意:这里说的是指向OC对象,像int、NSInteger这些基本数据类型可以的,将id指向int会报错

image.png

OC中的基类除了NSObject之外,还有一个NSProxy虚类。因此,id相比NSObject *指向的对象范围要更广

2.id动态数据类型,而NSObject *静态数据类型,默认情况下所有的数据类型都是静态

从上面代码我们不难看出,drinkWater方法并不是id指针指向对象的方法,调用了不是自己的方法,但是编译没有报错,只有运行时才报错了。

上一篇下一篇

猜你喜欢

热点阅读