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

时间:2016-01-18 08:20:06

标签: objective-c xcode

  

我使用了Xcode7 #import< objc / message.h取代。我想使用这个功能。但是这个函数只是空参数方法。我发现这个函数在文档中有三个参数

enter image description here

enter image description here

enter image description here

1 个答案:

答案 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);