zoukankan      html  css  js  c++  java
  • OC中的isa指针

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

  • 相关阅读:
    临时更换swap优先级
    设计一个百万级的消息推送系统----转
    使用apache cxf实现webservice服务
    如何成为一位「不那么差」的程序员---转
    轻量级web框架cicada----(转)
    shiro学习笔记
    java编程调试技巧
    zookeeper学习总结
    Kafka入门
    kafka 的经典教程
  • 原文地址:https://www.cnblogs.com/caijiaming/p/13807287.html
Copyright © 2011-2022 走看看