zoukankan      html  css  js  c++  java
  • ocRuntime基本功


    //所以类都继承于该类
    //任何拥有isa指针都可以称为对象
    NSObject {
    Class _Nonnull isa ; // 结构体指针
    }


    // 因此 objc_class 也是对象 ,这也就是为什么说类也是对象,具体参加《深入浅出 Cocoa 教程》
    struct objc_class {
    Class _Nonnull isa OBJC_ISA_AVAILABILITY;

    #if !__OBJC2__
    Class _Nullable super_class //父类
    const char * _Nonnull name //类名
    long version OBJC2_UNAVAILABLE;
    long info OBJC2_UNAVAILABLE;
    long instance_size OBJC2_UNAVAILABLE;
    struct objc_ivar_list * _Nullable ivars //变量列表
    struct objc_method_list * _Nullable * _Nullable methodLists //方法列表
    struct objc_cache * _Nonnull cache //缓存 可以直接无视
    struct objc_protocol_list * _Nullable protocols //协议列表 具体遵守哪些协议
    #endif

    } OBJC2_UNAVAILABLE;

    有了这些 我们就可以做很多事情
    1. 动态添加属性、修改属性
    2. 动态添加方法,修改方法
    3. 获取对象属性列表
    4. 查询某类是否遵循某一协议
    5. 查询某类是否可以执行某一个具体的方法
    6. 动态查找其父类 和 静态类

  • 相关阅读:
    深入浅出 JVM ClassLoader
    JVM 线上故障排查基本操作
    深入浅出 JVM GC(3)
    MyBatis 源码分析系列文章合集
    MyBatis 源码分析
    MyBatis 源码分析
    MyBatis 源码分析
    MyBatis 源码分析
    MyBatis 源码分析
    MyBatis 源码分析系列文章导读
  • 原文地址:https://www.cnblogs.com/TengSys/p/8227683.html
Copyright © 2011-2022 走看看