警告原因:
在ARC模式下,运行时需要知道如何处理你正在调用的方法的返回值。这个返回值可以是任意值,如void
,int
,char
,NSString
,id
等等。ARC通过头文件的函数定义来得到这些信息。所以平时我们用到的静态选择器就不会出现这个警告。因为在编译期间,这些信息都已经确定。
... [someController performSelector:@selector(someMethod)]; ... - (void)someMethod { //bla bla... }
第一种函数指针
SEL selector = NSSelectorFromString(@"test1:");
IMP imp = [cat methodForSelector:selector];
void(*func)(id,SEL,NSString *) = (void *)imp;
func(cat,selector,@"zhang");