最早引用的原文是这个,http://www.arigrant.com/blog/2014/2/12/why-objcmsgsend-must-be-written-in-assembly,文末总结如下
calling a function in C requires the signature to be known for each call-site at compile-time; doing so at run-time is not possible and so one must drop down into assembly and party there instead.
1. 我们无法定义一个C
函数,可以有可变的参数(可变参数是可以实现的,参考printf
函数)并且可以调用任意的C
函数指针,因为函数指针类型是在是无穷无尽的,根本就无法预先全部定义出来。
2. 使用汇编另一个很重要的原因就是速度,首先,汇编就比C
快,其次,通过使用汇编,可以免去大量局部变量拷贝的操作,参数会直接被存放在寄存器中,当找到IMP
时,参数已经保存在了寄存器中,可以直接使用。
总结如下
- 如果不使用汇编,则无法在运行时动态调用不同签名的C函数
- 使用汇编更快
Loading Comments...