getReturnValue 获取对象Crash
iOS反射使用【代码1】getReturnValue:获取OC对象,
在 iPhone4s+iOS8.4、iPhone4+iOS7.1(会崩),
iPhone6+iOS9.3、iPhone5+iOS8.4.1(不会蹦) ,
如果实现下面的【代码2】就在所有的系统上都不会崩溃,请问这是系统Bug还是什么?
// 代码1
id objcMinor;
// 返回值是 Objc
if( !strcmp(minorReturnType, @encode (id)) ) {
[invoMinor getReturnValue:&objcMinor];
}
// 代码2
// void *temp = NULL;
// [objcMinor getReturnValue:&temp];
// id objcMinor = (__bridge id)temp;
可以结合测试Demo里面的代码看看,下面截图的崩溃调用栈。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是个内存泄露问题,你把edit scheme->run->enable Zombile objects勾选,在控制台会输出
看了下内存地址,就是objcMajor这个对象。
造成这个的原因难查,我先把这个告诉你,你也看下。奇怪的是
掉这个方法不会有问题
id objcMinor;
修改为 __autoreleasing id objcMinor; 就好了
关于void *和id的区别 以及ARC如何处理 可以参考这个链接 http://stackoverflow.com/ques...