学习链接:https://www.jianshu.com/p/9e975a1cab93
学习消息机制时了解到了isa指针这个概念,那么isa指针到底是什么呢?
在这引出三个概念:
1)instance (实例对象)
2)class object (类对象)
3)metaclass(元类)
我们经常使用id来声明一个类对象,叫运行时动态绑定,编译器会帮我们找到id对应的类是什么,但是编译器是怎么找到id对应的类是什么的呢?
首先id是一个结构体指针
/// An opaque type that represents an Objective-C class. typedef struct objc_class *Class; /// Represents an instance of a class. struct objc_object { Class isa OBJC_ISA_AVAILABILITY; }; /// A pointer to an instance of a class. typedef struct objc_object *id;
这个结构体中有一个isa指针,接下来我们看一下这个isa指针指向什么东西
假设有如下代码
NSString *str = @"Hello World";
可以知道str是一个NSString类型的指针对象,所以isa指向的是NSString类,这个NSString可以说是一个class object(类对象),在这可能有点奇怪,类怎么又叫对象呢? 因为类本质
上也算一种对象,那么又有人问,你实例对象的isa指向类对象,那你类对象的isa又指向什么呢?实际上,类对象的isa指针指向的是metaclass(元类),下面放一张大佬的图
到这也就搞懂类isa指针是指向什么东东了。。。结束!