Objective-C使用动态绑定,但是如何?

bob*_*obo 4 objective-c dynamic-binding

我知道Objective-C对所有方法调用都使用动态绑定.这是如何实现的?在编译之前,objective-c"变成C代码"并且只使用(void*)指针来处理所有内容吗?

Lou*_*arg 11

从概念上讲,正在发生的是有一个调度程序库(通常称为Objective C运行时),编译器会转换如下内容:

[myObject myMethodWithArg:a andArg:b ];
Run Code Online (Sandbox Code Playgroud)

//Not exactly correct, but close enough for this
objc_msgSend(myObject, "myMethodWithArg:andArg:", a, b);
Run Code Online (Sandbox Code Playgroud)

然后运行时处理所有绑定和分派,找到一个合适的函数,并用这些args调用它.简单地说,你可以认为它有点像哈希查找; 当然,实际上要复杂得多.

还有很多与方法签名相关的问题(C不对类型进行编码,因此运行时需要处理它).