这就是我所说的:
从我读过的内容来看,objc_msgSend
当你发送一个Objective-C消息时,本质上是在c级发生的事情,并且这个设置被设置为Yes
确保发送的消息具有与接收者期望的相同数量的参数.
它是否正确?也有什么优点和缺点,以将其设置为Yes
或No
?我应该只Yes
在开发和No
生产中设置它吗?
你基本上是正确的,是的.
Apple默认将其设置为Yes,因为它有助于更快地发现错误.将其设置为No的唯一原因是因为您正在编译尚未更新的旧代码以使用此选项进行干净编译.
"启用严格检查objc_msgSend调用"是编译时检查,而不是运行时,因此在生产中将其关闭没有任何好处.
有一个介绍苹果的网站"什么在LLVM的新"(演讲的文字在这里).
看起来编译器现在(可选)严格检查对obj_msgSend的调用类型.您将使用正确类型的函数指针代替直接调用objc_msgSend.
给出的例子:
#include <objc/message.h>
void foo(void *object) {
typedef void (*send_type)(void *, SEL, int);
send_type func = (send_type)objc_msgSend;
func(object, sel_getUid("foo:"), 5);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2635 次 |
最近记录: |