2016-01-18 29 views

回答

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); 
相关问题