美文网首页
runtime 基础(一)

runtime 基础(一)

作者: 我是C | 来源:发表于2017-02-03 11:48 被阅读40次

    runtime是什么?

    oc是动态语言,oc代码在运行时会转换成c语言代码。
    
    你会问有什么用?
    做业务来说用处不大。开发sdk,热修复等等用处大大的。
    
    那为什么要了解runtime?
    了解runtime你会对oc的运行机制理解更深刻,本身学程序就是学一种思想。
    将实际问题以编程的思维来解决,也就是智能。
    

    oc对象

    每个Objective-C对象都有一个隐藏的数据结构,这个数据结构是Objective-C对象的第一个成员变量,它就是isa指针。
    

    看看oc对象的定义

    @interface NSObject <NSObject> {
        Class isa  OBJC_ISA_AVAILABILITY;
    }
    //一个isa指针
    

    看看Class

    typedef struct objc_class *Class;//结构体
    //结构体展开,注意下面的英文
    struct objc_class {
    //指向类对象的指针,类对象也是一个这样的结构体
        Class isa  OBJC_ISA_AVAILABILITY;
    
    #if !__OBJC2__
        Class super_class;    //父类                                   
        const char *name;                                         
        long version;                                             
        long info;                                                
        long instance_size;                                       
        struct objc_ivar_list *ivars;                             
        struct objc_method_list **methodLists;   //方法数组                 
        struct objc_cache *cache; //缓存方法                                
        struct objc_protocol_list *protocols;                     
    #endif
    
    } OBJC2_UNAVAILABLE;
    /* Use `Class` instead of `struct objc_class *` */
    
    

    oc有几种对象

    一种是实例对象
    一种是类对象
    

    举例:
    现在我有两个类,ClassA是父类,ClassB类是子类.
    ClassA 两个方法: - methodA | +methodA
    ClassB 两个方法: - methodB | +methodB
    实例
    a = [ClassA new];
    b = [ClassB new];

    实例调用

    [b  methodB]  
    ---b指向ClassB->isa,isa去结构体遍历methodLists找到methodB方法;
    
    [b methodA]
    ---因为ClassB 没有对应的方法,然后通过isa的super_class去遍历父类的methodLists,找到了methodA.
    

    类调用

    [ClassB  methodB]  
    ---ClassB的isa,isa中还有一个Class isa参数,这个isa指向的是一个类对象
    
    [ClassB methodA]
    ---因为ClassB 没有对应的方法,然后通过isa的super_class去遍历父类的methodLists,找到了methodA.
    

    盗图


    434405-20151227181339499-1243485875.png

    如果我写的有问题,请告诉我,我会积极改正!

    相关文章

      网友评论

          本文标题:runtime 基础(一)

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