美文网首页
isa的理解

isa的理解

作者: 面朝对象_春暖花开 | 来源:发表于2016-12-30 11:02 被阅读20次

在NSObject.h里面: isa就是指向谁(哪个类)

@interface NSObject <NSObject> {
    Class isa  OBJC_ISA_AVAILABILITY;
}

再点开 Class 的定义:

struct objc_class {
    Class isa  OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
    Class super_class                                        OBJC2_UNAVAILABLE;
    const char *name                                         OBJC2_UNAVAILABLE;
    long version                                             OBJC2_UNAVAILABLE;
    long info                                                OBJC2_UNAVAILABLE;
    long instance_size                                       OBJC2_UNAVAILABLE;
    struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
    struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
    struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
    struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
#endif
}

1,当我们调用[child class] 的时候,child就会通过isa指针去找到Child的class。
2,当我们调用[child superclass]的时候,child 通过isa找到Child的class,再通过super_class,找到Parent的class。
在这里,再普及objc_class 的两种类型:
class:实例对象(child、Child)的isa指向的结构体;

metaclass:class的isa指向的一个结构体;
3,接着,调用[child SelectorC],child通过isa找到Child的class,在class(注意看上面 struct objc_class 的定义)的方法列表里面找到SelectorC;
4,再试着调用[child SelectorP],child通过isa找到Child的class,发现class里面并没有这个方法,通过class里面的super_class找到Parent的class,在里面的方法列表找到了SelectorP;
5,再是类方法[Child ClassSelectorC],Child(请注意,大写)通过isa找到Child的class,通过class的isa找到Child的metaclass,在metaclass的方法列表里面找到了ClassSelectorC;
6,再试着调用[Child ClassSelectorP],Child通过isa找到Child的class,通过class的isa找到Child的metaclass,发现metaclass里面并没有这个方法,通过metaclass里面的super_class找到Parent的metaclass,在里面的方法列表找到了ClassSelectorP;

<h1>按钮触发其他类里面的类方法

<h5>objc_getMetaClass//元类
objc_getClass//类
class_getSuperclass//父类,三个方法参数为''char''返回值Class,忘记的话查看class的文件.

unsigned int count;
    Method * methods = class_copyMethodList(objc_getMetaClass("mangeiChild"), &count);
    for (int i=0; i<count; i++) {
        Method method = methods[i];
        selector = method_getName(method); 
    }
    [self.btn addTarget:[mangeiChild class] action:selector forControlEvents:UIControlEventTouchUpInside];

相关文章

  • isa理解

    由类生成对象。对象的结构体实例通过isa这个成员变量来保持类的结构体实例指针,建立类与对象间的关系。oc运行时为每...

  • isa的理解

    在NSObject.h里面: isa就是指向谁(哪个类) 再点开 Class 的定义: 1,当我们调用[child...

  • NSObject isa

    title: NSObject isa 一直对NSObject isa理解不是很好,看到个大牛写的博客后,理解很多...

  • iOS Runtime面试题(isa指针)

    说一下对 isa 指针的理解, 对象的isa 指针指向哪里?isa 指针有哪两种类型? isa 等价于 is ki...

  • iOS Runtime面试题(说一下对 isa 指针的理解)

    说一下对 isa 指针的理解, 对象的isa 指针指向哪里?isa 指针有哪两种类型? isa 等价于 is ki...

  • iOS开发 Runtime 流程图

    你了解多少Runtime? isa 指针的理解 实例对象 isa 指向类对象 类对象指 isa 向元类对象 元类对...

  • iOS中的Runtime

    一.isa isa的理解 在arm64架构之前, isa就是一个普通的指针,存储着Class、Meta-Class...

  • 对isa的理解

    在arm64位之前就是个普通的指针,里面存储这类对象还有元类对象地址值,在arm64位开始,进行了优化,采用uni...

  • 对isa的理解

    我们可以从图1看到 NSObject有一个属性isa用Class来定义,那么我点击Class接着看 我们可以从图2...

  • objc 源码

    类的结构 关于isa的理解 由上图可知:实例变量的isa指向的是类,而类的isa指向的是元类(metaClass)...

网友评论

      本文标题:isa的理解

      本文链接:https://www.haomeiwen.com/subject/swkmvttx.html