Objective c 为什么没有三参数objc_msgSend()方法?

Objective c 为什么没有三参数objc_msgSend()方法?,objective-c,xcode,Objective C,Xcode,我使用了Xcode7#import。我想使用这个函数。但该函数只是空参数方法。我发现这个函数在文档中包含三个参数 如果要使用objc\u msgSend,必须将其转换为正确的类型。 我给你发了一个例子,说明我是如何在我的一个项目中使用它的 - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)bas

我使用了Xcode7#import。我想使用这个函数。但该函数只是空参数方法。我发现这个函数在文档中包含三个参数


如果要使用objc\u 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);

简短回答:永远不要直接调用该函数。这不是正确的头文件;您需要
objc/objc runtime.h