一个Objective-C对象如何进行内存布局?(考虑有父类的情况)
1.对象isa指向类对象,类对象的isa指向元类。元类isa指向根元类。根元类的isa指针指向自己,superclass指针指向NSObject类
2.实例对象结构体只有一个isa变量,指向实例对象所属的类。类对象有isa,superclass,方法,属性,协议列表,以及成员变量的描述。
3.所有的对象调用方法都是一样的,没有必要存在对象中,对象可以有无数个,类对象就有一个所以只需存放在类对象中
/// Represents an instance of a class. struct objc_object { Class _Nonnull isa OBJC_ISA_AVAILABILITY; }; |
可以在runtime.h里面找到类对象的定义
struct objc_class { Class _Nonnull isa OBJC_ISA_AVAILABILITY; #if !__OBJC2__ //向该类所继承的父类对象 Class _Nullable super_class OBJC2_UNAVAILABLE; const char * _Nonnull name OBJC2_UNAVAILABLE; long version OBJC2_UNAVAILABLE; long info OBJC2_UNAVAILABLE; long instance_size OBJC2_UNAVAILABLE; //成员变量列表 struct objc_ivar_list * _Nullable ivars OBJC2_UNAVAILABLE; //方法列表 struct objc_method_list * _Nullable * _Nullable methodLists OBJC2_UNAVAILABLE;//方法列表 //用于缓存调用过的方法 struct objc_cache * _Nonnull cache OBJC2_UNAVAILABLE; //协议链表用来存储声明遵守的正式协议 struct objc_protocol_list * _Nullable protocols OBJC2_UNAVAILABLE; #endif } |
最新文章
- python_爬虫一之爬取糗事百科上的段子
- Firemonkey ListView 点击事件
- IIS与Apache共用80端口方法
- nodejs的第二天学习笔记
- 堡垒机环境-jumpserver部署
- 让Storm插上CEP的翅膀 - Siddhi调研和集成
- flume ng之组件介绍
- AFNetworking自我总结
- 开源第三方登录组件OAuthLogin2.0 解析及开源地址
- CentOS随笔——关机命令
- web进修之—Hibernate 类型(4)
- ERP系统的问题
- 分布式控制系统Git学习
- Windows Server 2008 R2 64位操作系统安装Oracle 11g 64位数据库,在客户终端上安装Oracle 11g 32位,才能安装P/L Sql Developer并配置
- Python学习笔记第七周
- zabbix监控mysql最简单的方法
- LESS CSS 实例
- C++中的关键字用法--- 四种强制类型转换的总结
- taskset
- 重温PHP面向对象的三大特性