首页 > 技术文章 > OC中的isa指针

caijiaming 2020-10-13 10:30 原文

学习链接: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指针是指向什么东东了。。。结束!

 

推荐阅读