码迷,mamicode.com
首页 > 其他好文 > 详细

Runtime学习笔记

时间:2015-07-16 11:32:26      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

记录下自己学习基础runtime

Runtime 运行时 把所有变量 方法的调用推迟到运行时编译

类和对象:

Class OC中得类是有Class表示 是一个指向objc_class结构体的指针 定义如下

typedef struct objc_class *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;  // 类的版本信息,默认为0
    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

} OBJC2_UNAVAILABLE;

isa:oc中所有类也是对象(类对象)这个对象的Class里边也有一个isa指针 指向metaClass(元类)
super_class:指向该类的父类 如果类是根类(Nsobject)他的父类为Null

version:类的版本信息;
cache:用于缓存最近使用的方法。当一个接收消息的对象受到消息时 他会根据自己的isa指针去查找能够响应这个消息的对象。在实际使用中,这个对象只有一部分方法是常用的,很多方法其实很少用或者根本用不上。这种情况下,如果每次消息来时,我们都是methodLists中遍历一遍,性能势必很差。这时,cache就派上用场了。在我们每次调用过一个方法后,这个方法就会被缓存到cache列表中,下次调用的时候runtime就会优先去cache中查找,如果cache没有,才去methodLists中查找方法。这样,对于那些经常用到的方法的调用,但提高了调用的效率。




Runtime学习笔记

标签:

原文地址:http://www.cnblogs.com/luguojiangshi/p/4650479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!