当执行[object selector:para]的时候,发生了什么?
来源:互联网 发布:詹姆斯首秀数据 编辑:程序博客网 时间:2024/04/29 13:26
本来只是想写一下SEL,IMP这些类型到底有什么意义的,结果,网上查资料挺丰富的,干脆把整个过程都捋捋.
在Objective-C中的方法调用,其实是调用下面这个函数向对象发送一个信息.
id objc_msgSend(id self, SEL op, ...)
self就是接受该消息的对象,...就是参数列表,这里比较特别的是SEL这个类型.
从Apple的文档中,可以看到
typedef struct objc_selector *SEL;
并解释了SEL代表了一个Method Selector.而Method Selecto则代表了Method在运行时的名字.
光看文档解释,可能也不是很清楚,接下来,我们慢慢发掘其中的奥妙.
除了SEL,在文档中,还能看到IMP这种类型.
id (*IMP)(id, SEL, ...)
其实就是个函数指针嘛,指到哪呢?必然是指到函数的开始地址.
因为苹果对我们隐藏了实现的细节,所以我只能根据收集的资料猜测,调用[object selector:para]方法时,
(1)调用sel_registerName("selector")来获取SEL
(2)调用objc_msgSend(object, SEL, para)
(3)在objc-msgSend中通过SEL获取到IMP
(4)调用IMP指向的函数.
0 0
- 当执行[object selector:para]的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- 当你访问淘宝的时候,发生了什么?
- Struts2学习(四):Action执行的时候发生了什么
- 执行ping操作的时候发生了什么?
- 当你输入一个网址的时候,究竟发生了什么?
- 当在浏览器地址栏输入一个网址的时候,究竟发生了什么?
- 当你输入一个网址的时候,究竟发生了什么?
- 当在浏览器地址栏输入一个网址的时候,究竟发生了什么?
- C++的4种类型转换关键字及其特点
- C - 01背包
- hmap理解
- zend studio 配thinkphp框架学习笔记
- toad及pl/sql使用Oracle instant client访问数据库
- 当执行[object selector:para]的时候,发生了什么?
- bind1nd,not1,compose1等用法
- Android平台按键消息处理流程一(Android4.2.2)
- .NET Micro Framework-百度百科上的介绍
- 数据结构上机测试1:顺序表的应用
- mysql模块学习:python操作MySQL数据库
- 创新人才的价值
- Python网络爬虫3 ---- ubuntu下安装爬虫框架scrapy
- 【LeetCode】Linked List Cycle