美文网首页
(二)Runtime(Block)

(二)Runtime(Block)

作者: cdd48b9d36e0 | 来源:发表于2018-10-29 18:01 被阅读10次

    看到126节的小结:

    1. (见视频126)目前出现了第二个调方法没有走objc_msgSend(id reciever, sel imd)的方法(上一个是+load方法,完全没有走消息机制,具体见前面的内容),那就是[super XXXX],他走的方法是objc_msgSendSuper方法,而且与objc_msgSend带的参数也不一样,objc_msgSendSuper的参数是(struct a, sel imd),a这里是一个结构体:struct a{self, [self superclass]},其中第一个参数self是消息的接收者,第二个参数是接收者的父类,objc_msgSendSuper的意思就是从[self superclass]的内存方法列表开始去寻找方法(如图)

    但是!!!与以往不同的是,这里生成的cpp文件上显示的是objc_msgSendSuper,实际上真正运行的时候打断点用汇编查看到的却是objc_msgSendSuper2方法,而且第一个参数结构体的第二个参数是[class [current class]] (见视频127)
    由上可见,转成的cpp的实现其实只是参考,但是大部分都是正确的,要看最正确的执行过程就需要看转成的汇编代码

    1. 函数的局部变量存于栈中,而且是从高到低,与堆上从低到高相反
    2. runtime添加成员变量只能在新添加的类注册之前,也就是说成员变量是只读的,而属性、方法不受此限制

    相关文章

      网友评论

          本文标题:(二)Runtime(Block)

          本文链接:https://www.haomeiwen.com/subject/brcitqtx.html