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

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

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

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

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

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

第一种 更改Xcode build setting

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

这里通过(void *)送入三个参数,你可以根据自己参数类型强转原本是void()的函数方法

posted @ 2019-12-04 14:15  萧蔷ink  阅读(1198)  评论(0编辑  收藏  举报