[新手求教] IMP与void*的使用有和区别?为何运行结果不一致?
iiye 2012-04-16 04:14:48 刚开始接触Xcode,当前版本是Version 4.3.2 (4E2002),5.1SDK
拜读的是Yaski老师的:http://www.cnblogs.com/yaski/archive/2009/04/05/1429735.html
Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器Selector以及函数指针
使用文中的代码进行运行的时候,遇到一个问题:
void(*setSkinColor_Func) (id, SEL, NSString*);
//void(*say_Func) (id, SEL);
IMP say_Func; //typedef id (*IMP)(id, SEL, ...);
say_Func这个指针使用IMP的时候运行会出错,但改成void*的指针使用就没有问题
出错的提示是:
Thread 1 - [DoProxy functionPointers]
EXC_BAD_ACCESS (code=1, address=XXX....)
出错停住的语句是:say_Func(cattle[1], say);
- (void) functionPointers
{
setSkinColor_Func = (void (*)(id, SEL, NSString*)) [cattle[1] methodForSelector:skin];
say_Func = [cattle[1] methodForSelector:say];
//say_Func = (void (*)(id, SEL)) [cattle[1] methodForSelector:say];
setSkinColor_Func(cattle[1], skin, @"verbose");
NSLog(@"Running as a function pointer will be more efficiency!");
say_Func(cattle[1], say);
}