Object-c之objc_msgSend

周知,Object-c他的方法是通过消息转发来实现的,其底层就是是objc_msgSend,所以我们的所有selector都可以通过objc_msgSend来直接分发消息。

但如果面对

- (void)write;

我们直接去写objc_msgSend([self class],@selector(write)),其实编译器是过不了的,因为objc_msgSend的定义OBJC_EXPORT void objc_msgSend(void /* id self, SEL op, ... */ )是这样的,就是不需要传参数,如果你那样写了,会过不了语法分析的。所以只能强制转下这个objc_msgSend如:

((void(*)(id,SEL))objc_msgSend)([self class],@selector(write));

这样才行可以。别的就类推了。

你可能感兴趣的:(Object-c之objc_msgSend)