ios Class, isa,元类笔记

isa指针:OC是一门面向对象的语言,每一个对象都是类的一个实例。在objective-c语言的内部,每一个对象都有一个isa指针,指向该指针的类。每一个类描述了一系例他的实例的特点,包括成员变量的列表,成员函数的列表。每一个对象都可以接收消息,而对象接收消息列表保存在他所对应的类中。
在Objective-C中,任何类的定义都是对象。类和类的实例(对象)没有任何本质上的区别。任何对象都有isa指针。

那么什么是类呢?

Class 是一个 objc_class 结构类型的指针, id是一个 objc_object 结构类型的指针.

isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而Class里也有个isa的指针, 指向meteClass(元类)。元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类(meteClass)也是类,它也是对象。元类也有isa指针,它的isa指针最终指向的是一个根元类(root meteClass).根元类的isa指针指向本身,这样形成了一个封闭的内循环.

每一个对象本质上都是一个类的实例。其中类定义了成员变量和成员方法的列表。对象通过对象的isa指针指向类。
每一个类本质上都是一个对象,类其实是元类(meteClass)的实例。元类定义了类方法的列表。类通过类的isa指针指向元类。
所有的元类最终继承一个根元类,根元类isa指针指向本身,形成一个封闭的内循环
    // 实例对象
    NSObject *obj = [[NSObject alloc] init];
    
    // 类对象
    Class class = [NSObject class];
    
    // 元类对象
    Class metaClass = object_getClass([NSObject class]);
    
    NSLog(@"obj: %p, class: %p, metaClass: %p", obj, class, metaClass);
    obj: 0x6000001f83a0, class: 0x10e4faec8, metaClass: 0x10e4fae78
屏幕快照 2019-04-09 下午6.26.22.png

非原创,自己学习笔记,方便回顾和查看!

https://blog.csdn.net/shisanshuno1/article/details/79593779

http://ios.jobbole.com/81657/

你可能感兴趣的:(ios Class, isa,元类笔记)