今天在研究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()的函数方法