答案 0 :(得分:1)
如果要使用objc_msgSend,则必须将其强制转换为正确的类型。 我给你发了一个关于我如何在我的一个项目中使用它的例子
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL{
SEL wk_sel = NSSelectorFromString(@"loadData:MIMEType:characterEncodingName:baseURL:");
((void (*)(id, SEL, id, id, id, id))objc_msgSend)(self,wk_sel,data,MIMEType,textEncodingName,baseURL);
}
如果你喜欢更简洁的sintax,你可以使用函数指针。 如果您的方法声明为:
- (void)doSomething:(id)arg0 withArgument:(float)arg1 err:(NSError **)err{}
你必须做这样的事情:
void (*objc_msgSendTyped)(id self, SEL _cmd, id something, float arg1, NSError**error) = (void*)objc_msgSend;
objc_msgSendTyped(self, @selector(doSomething:withArgument:err:), foo, bar, &error);