[新手求教] 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);
}
...全文
124 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iiye 2012-04-20
  • 打赏
  • 举报
回复
代码在
http://www.cnblogs.com/yaski/archive/2009/04/05/1429735.html

一个字都没差的代码
volcan1987 2012-04-19
  • 打赏
  • 举报
回复
说实话,没觉得哪有问题,但是要保证cattle[1]有say这个方法

楼主可以多贴点出错代码看看
iiye 2012-04-19
  • 打赏
  • 举报
回复
。。。。。。。。万能的csdn啊啊啊
iiye 2012-04-17
  • 打赏
  • 举报
回复
哦呀,为啥没人搭理啊,求懂。。。。。

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧