今天在研究runtime相关的东西,关于消息的部分.
消息是通过objc_msgSend()这个runtime方法来实现的。这个方法需要一个target,selector,还有一些参数。理论上来说,编译器只是把消息分发变成objc_msgSend来执行。比如下面这两行代码是等价的。

[array insertObject:foo atIndex:5];
objc_msgSend(array, @selector(insertObject:atIndex:), foo, 5);

但是自己尝试写了一下demo 运行的时候发现,提示

Xcode 运行objc_msgSend 提示objc_msgsend()Too many arguments to function call, expected 0

百思不得其解,因为源码里面查询,是看得到相关参数设定的

Xcode 运行objc_msgSend 提示objc_msgsend()Too many arguments to function call, expected 0

最后查找了一些资料,发现是此功能被disable 掉了,这里有两种方法可以恢复。

第一种 更改Xcode build setting

Xcode 运行objc_msgSend 提示objc_msgsend()Too many arguments to function call, expected 0

第二种 通过参数传递直接强转msgsend

这里通过(void *)送入三个参数,你可以根据自己参数类型强转原本是void()的函数方法
Xcode 运行objc_msgSend 提示objc_msgsend()Too many arguments to function call, expected 0

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-05
  • 2021-12-25
  • 2022-12-23
  • 2021-04-22
  • 2021-04-16
猜你喜欢
  • 2022-02-26
  • 2022-12-23
  • 2021-06-20
  • 2022-12-23
  • 2022-12-23
  • 2021-05-20
  • 2022-12-23
相关资源
相似解决方案