为什么objc_msgSend必须用汇编实现

Tags
iOS
Date
Jun 16, 2020
 
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时,参数已经保存在了寄存器中,可以直接使用。
 
总结如下
  1. 如果不使用汇编,则无法在运行时动态调用不同签名的C函数
  1. 使用汇编更快
 

Loading Comments...