【华为无线传输源码】【时时彩游戏源码】【电源源码网站】objc msgsend 源码

2024-12-23 07:53:29 来源:动画压缩算法 源码 分类:焦点

1.为什么程序会在objc
2.self和super的区别

objc msgsend 源码

为什么程序会在objc

       ç¨‹åºå´©æºƒåœ¨objc_msgSend(),最有可能的原因是向一个已经释放的对象发送消息。

       å…¶ä»–的原因如下:

       1.也许你的指针是完全正确的,但是别的缺胳膊少腿的对象的内容可能是溢出在附近的一个分配的缓冲区。

       2. 或者使用重复的指针指向现在你的对象所占用的内存。

       3.极个别objc_msgSend()崩溃是因为内存被破坏,但通常的问题是在接收对象本身。

       è§£å†³é—®é¢˜çš„方法

       1. 找到接收消息的对象和转换器(selector )注册的所有对象。

       objc_msgSend()存储了receiver和the selector在cpu的寄存器中。不同的架构的cpu寄存器的名称不同

       objc_msgSend

       objc_msgSend_fpret objc_msgSend_stret

        receiver SEL receiver SEL

       i eax* ecx eax* ecx

       x_ rdi rsi rsi rdx

       ppc r3 r4 r4 r5

       ppc r3 r4 r4 r5

       arm r0 r1 r1 r2

       arm x0 x1 — —

       åœ¨è°ƒè¯•å™¨æŽ§åˆ¶å°ä¸­ï¼Œå½“程序停止时,打印无效地址,您可以打印上面的表中使用的寄存器名称的接收者的地址。

       ä»¥ä¸‹æ˜¯åœ¨Xcode 5.1连接ipad的结果

       (lldb) re r -f b r0

        r0 = 0b

       è½¬æ¢æˆè¿›åˆ¶

       (lldb) re r -f b r0 --format x

        r0 = 0xbcc

       å¯¹åº”çš„gdb的指令为

       (gdb) p/x $eax

        $1 = 0x1

self和super的区别

       è¦ç‚¹ï¼š

       self调用自己方法,super调用父类方法

       self是类,super是预编译指令

       ã€self class】和【super class】输出是一样的

       self和super底层实现原理:

       å½“使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找,然后调用父类的这个方法。

       å½“使用 self 调用时,会使用 objc_msgSend 函数: id objc_msgSend(id theReceiver,华为无线传输源码 SEL theSelector, ...)。第 一个参数是消息接收者,第二个参数是调用的具体类方法的 selector,后面是 selector 方法的可变参数。以 [self setName:] 为例,编译器会替换成调用 objc_msgSend 的函数调用,其中 theReceiver 是 self,theSelector 是 @selector(setName:),这个 selector 是从当前 self 的 class 的方法列表开始找的 setName,当找到后把对应的 selector 传递过去。

       å½“使用 super 调用时,会使用 objc_msgSendSuper 函数:id objc_msgSendSuper(struct objc_super *super, SEL op, ...)第一个参数是个objc_super的结构体,第二个参数还是类似上面的类方法的selector,

       struct objc_super {

        id receiver;

        Class superClass;

       };

       å½“编译器遇到 [super setName:] 时,开始做这几个事:

       1)构 建 objc_super 的结构体,此时这个结构体的第一个成员变量 receiver 就是 子类,和 self 相同。而第二个成员变量 superClass 就是指父类

       è°ƒç”¨ objc_msgSendSuper 的方法,将这个结构体和 setName 的 sel 传递过去。

       2)函数里面在做的事情类似这样:从 objc_super 结构体指向的 superClass 的方法列表开始找 setName 的 selector,找到后再以 objc_super->receiver 去调用这个 selector

更多资讯请点击:焦点

推荐资讯

台中訪友吃完早餐 7人上吐下瀉送醫

最新消息,台中清水中山路一間民宅,今29)天傳出疑似集體食物中毒案件,有民眾一家子趁暑假到台中找朋友玩,早上吃完早餐後,大人小孩陸續都有上吐下瀉的情況,7人送醫,至於確切為何種食物所造成,還有待調查釐

手写 源码_手写源码

1.手写模拟器易语言源代码?2.手写一个简单的谷歌浏览器拓展插件附github源码)3.学习vue源码9)手写代码生成器4.徒手码一千行以上代码是一种怎样的体验?手写模拟器易语言源代码? 手写模拟

短线 指标源码_短线 指标源码是什么?

1.kd指标公式源码2.通达信《机构进场》指标,豪华版短线技术,堪称炒股界的海天盛筵3.高胜率短线宝指标公式,抓中短线波段牛股主/副图/选股指标公式源码4.通达信机构短线操作策略擒牛主图/副图指标公式