周知,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));
这样才行可以。别的就类推了。