第七篇:类的本质与isa指针及SEL指针的关系
2015-09-11 17:04
239 查看
1.》两指针所在的类:isa指针 和 SEL指针 是属于NSObject基类。
》类的本质:即是一个结构体。
2.当创建一个类后:
》创建对象:类 * p = [类 new] ;
》在创建一个对象之前,在堆内存中就先存在了一个该类的类类型对象,其中有一个SEL指针就是指向在代码区内该类的第一个方法。
》定义一个对对象之后,在堆内存中创建了一个该类的对象,该对象包含了一个isa指针的成员变量(第一个属性),isa指针则指向在堆里面存在的类类型对象, 在栈内存里创建了一个该类的指针p,p指针指向的是isa地址。
3.当执行[p 方法] 时:
》当p调用该类的一个方法时,首先通过p找到isa指针,再通过isa指针找到类类型对象,当在堆内存中找到类类型对象后,首次调用该类的方法时,用while(SEL == 方法地址) 找到该方法,这样就完成了一次方法的调用。当下一次该对象调用同一个方法时,直接在缓存中找到。
4.当创建一个类对象内存表:
》类的本质:即是一个结构体。
2.当创建一个类后:
》创建对象:类 * p = [类 new] ;
》在创建一个对象之前,在堆内存中就先存在了一个该类的类类型对象,其中有一个SEL指针就是指向在代码区内该类的第一个方法。
》定义一个对对象之后,在堆内存中创建了一个该类的对象,该对象包含了一个isa指针的成员变量(第一个属性),isa指针则指向在堆里面存在的类类型对象, 在栈内存里创建了一个该类的指针p,p指针指向的是isa地址。
3.当执行[p 方法] 时:
》当p调用该类的一个方法时,首先通过p找到isa指针,再通过isa指针找到类类型对象,当在堆内存中找到类类型对象后,首次调用该类的方法时,用while(SEL == 方法地址) 找到该方法,这样就完成了一次方法的调用。当下一次该对象调用同一个方法时,直接在缓存中找到。
4.当创建一个类对象内存表:
相关文章推荐
- 迷宫求解
- Linux下Redis启动/关闭/重启服务脚本
- 论java中的contains
- 如何将多个JAR包合并并混淆
- ls命令之头脑风暴
- 纯css实现蓝色圆角效果水平导航菜单代码
- 安卓软键盘(输入法)相关
- nyoj 19 擅长排列的小明 【全排列(n中抽取m个数)】
- 小白书之求排列
- JavaScript日期格式化函数
- android抓包工具fiddler使用介绍 抓取 手机APP 中资源。
- 树状数组解析
- SpringMVC深度探险(四) —— SpringMVC核心配置文件详解
- Hi~ o(* ̄▽ ̄*)ブ我们交往吧!记TCP的三次握手
- java4
- 使用RBL拦截垃圾邮件
- debian flam3 依赖文件
- 字符编码笔记:ASCII,Unicode和UTF-8,附带 Little endian和Big endian的解释
- c++模板类学习
- NSDate , DateTime 相互转化 ,根据本机显示时间