iOS 类和对象的区别

2020-02-10  本文已影响0人  CrystalZhu

class 和 object 在Object-C的定义

typedef struct objc_class *Class;  //一个不透明含糊的类型,表示一个Object-C类
//对象即为表示类的实例
typedef struct objc_object{
     Class isa;
}*id;

objc_class结构体的实现

struct objc_class{
  struct objc_class *isa;
  struct objc_class *super_class;
  struct objc_ivar_list *ivars;
  struct objc_method_list **methodlist;
  struct objc_cache  *cache;
  struct objc_protocol_list *protocols;
  long version;
  long info;
  long instance_size;
  const char *name;
};
isa指针

是一个类型为objc_class指针,是和class一个类型的指针,那么我们是不是可以这样说:一个以objc_class指针指向的所有东西都可以当作一个objc对象来对待.

super_class父类

我们知道所有类都继承于NSObject或者NSProxy,那么NSObject是所以类的父类,NSObject和NSProxy的父类是null

name

const char *name一个C类型的字符串,用来表示类的名字
在运行时可以通过方法idobjc_getClass(constchar *aClassName)来得到这个类的名字,通过idObjc_getMetaClass(const char * aClassName)来得到该类的metaclass

version版本信息

默认值是0,可以通过运行时通过方法class_setVersion修改版本信息,通过class_getVersion来得到版本信息

info

供运行时提供的一些位标识符

instance_size

这个类实例变量的大小,内含了从父类继承下来的实例变量

ivars

用来存储每一个实例变量的地址

cache

用来存储最近使用方法,提高效率优先

protocols

用来存储声明遵守的正式协议

Person *p1 = [Person new];
[Person 方法名]  类方法
[p1 方法名]  对象方法
上一篇 下一篇

猜你喜欢

热点阅读