Cocos2D在Xcode7和iOS 9.2上IMP调用出错
2016-01-04 09:22
357 查看
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
原来的代码一直在Xcode6.4上和iOS 8.4上运行,没有什么问题.
但是在转至Xcode7.2上在iOS9.2上运行后,以下方法中出现错误:
//执行一个可变方法 -(id)invokeSelectorNamed:(NSString *)selectorName{ SEL selector = NSSelectorFromString(selectorName); IMP imp = [self methodForSelector:selector]; id (*func)(id,SEL) = (void*)imp; return func(_gameScene.curMapNode,selector); }
错误类型为i386通用保护错误.
项目中有多处会调用以上方法,而且传入的selectorName是不同的.后来调试发现只有某些selector调用时会出错,而另外一些从不出错.
仔细检查出错的那些selector代码,发现这些代码不返回值,而func的原型中是返回值的.
由此可见在Xcode7.2中加强了IMP调用的检查,函数原型不一致,哪怕仅仅是返回值不一致时,调用都会出错.
知道原因解决也很简单了,就是让每一个函数原型一致,哪怕返回nil都可以:
(NSString*)someFunc{ //原代码 return nil; }
相关文章推荐
- CocosD在Xcode7和iOS 9.2上IMP调用出错
- Cocos2D两个方法的重构一例
- Cocos2D两个方法的重构一例
- Cocos2D两个方法的重构一例
- quick-cocos2d 开发工具sublime text3及其强力插件QuickXDev
- 从window环境切换到Mac环境开发cocos2dx
- 20.cocos2d-x时钟小项目
- cocos2d中的function和CC_CALLBACK组合
- Cocos2d-x编译Android环境
- CocosForWinWithFramework-v2.3.3的bug
- cocos2dx-js 编译android包的方法
- cocos2d-x按钮CCControlButton的用法
- Cocos2dx 3.x创建Layer的步骤
- vs2012环境下,cocos2dx3.4 c++项目调用Lua的环境搭建
- 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象
- cocos2d-x 新建项目 Cannot open include file: ‘cocos2d.h’
- cocos2dx 音效 粒子 数据存储
- cocosjs+ccs花屏解决
- cocos2d-x学习笔记【三】添加精灵及相关操作
- cocos2d-x main.cpp源码详析 v2.26