Runtime 中的 _cmd、 IMP
2024-09-21 23:13:26
IMP
IMP-指向实际执行函数体的函数指针
#if !OBJC_OLD_DISPATCH_PROTOTYPES
typedef void (*IMP)(void /* id, SEL, ... */ );
#else
typedef id (*IMP)(id, SEL, ...);
#endif
可以看到,这个函数体前两个参数是 id(消息接受者,也就是对象),以及SEL(方法的名字)
method/objc_method
method - 指向Objective C中的方法的指针
typedef struct objc_method *Method;
其中
struct objc_method {
SEL method_name OBJC2_UNAVAILABLE;
char *method_types OBJC2_UNAVAILABLE;
IMP method_imp OBJC2_UNAVAILABLE;
} OBJC2_UNAVAILABLE;
_cmd
SEL 类型的一个变量,Objective C的函数的前两个隐藏参数为self 和 _cmd
Ivar
ivar - objective C中的实例变量
typedef struct objc_ivar *Ivar;
可以看到变量的内存模型
struct objc_ivar {
char *ivar_name OBJC2_UNAVAILABLE;
char *ivar_type OBJC2_UNAVAILABLE;
int ivar_offset OBJC2_UNAVAILABLE;
#ifdef __LP64__
int space OBJC2_UNAVAILABLE;
#endif
} OBJC2_UNAVAILABLE;
最新文章
- EChart系列:在echart3中使用百度地图扩展之后,如何获取到百度地图对象
- php 下设置cookie问题
- vs code插件记录
- C# for循环 循环中先求长度还是使用list.Count,哪个效率高
- PHP大文件存储示例,各种文件分割和合并(二进制分割与合并)
- 如何决定DCOM是否可用
- PHP面试出场率较高的题目<;转载>;
- HTTP2.0介绍
- <;<;易货>;>;项目Postmortem结果
- linux 下 `dirname $0`
- Spring 操作数据库
- android捕获ListView中每个item点击事件
- Linux入门之——安装虚拟机软件
- UVA 12113 Overlapping Squares
- 转: seajs手册与文档之 -- require规则
- 进口fbx角色动画read-only解
- [LeetCode] K Inverse Pairs Array K个翻转对数组
- 微信小程序 app.json文件配置
- centos7搭建ELK Cluster集群日志分析平台(三):Kibana
- AtCoder Regular Contest 099 (ARC099) E - Independence 二分图