我知道 Objective-C 对所有方法调用都使用动态绑定。这是如何实施的? Objective-c 是否在编译前“转换为 C 代码”并仅使用 (void*) 指针来处理所有内容?
从概念上讲,发生的事情是有一个调度程序库(通常称为 Objective C 运行时),编译器会转换如下内容:
[myObject myMethodWithArg:a andArg:b ];
into
//Not exactly correct, but close enough for this
objc_msgSend(myObject, "myMethodWithArg:andArg:", a, b);
然后运行时处理所有绑定和分派,找到合适的函数,并使用这些参数调用它。简单地说,您可以将其视为有点像哈希查找;当然,这比现实要复杂得多。
还有很多与方法签名等相关的问题(C 不编码类型,因此运行时需要处理它)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)