ios - getReturnValue 获取对象Crash
阿神
阿神 2017-04-18 09:25:25
[iOS讨论组]

iOS反射使用【代码1】getReturnValue:获取OC对象,
在 iPhone4s+iOS8.4、iPhone4+iOS7.1(会崩),
iPhone6+iOS9.3、iPhone5+iOS8.4.1(不会蹦) ,
如果实现下面的【代码2】就在所有的系统上都不会崩溃,请问这是系统Bug还是什么?

下载测试Demo

// 代码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里面的代码看看,下面截图的崩溃调用栈。

阿神
阿神

闭关修行中......

全部回复(2)
黄舟
  • 是个内存泄露问题,你把edit scheme->run->enable Zombile objects勾选,在控制台会输出

*** -[CFNumber release]: message sent to deallocated instance 0x7baa7460

看了下内存地址,就是objcMajor这个对象。

  • 造成这个的原因难查,我先把这个告诉你,你也看下。奇怪的是

 [invoMajor setSelector:@selector(minor)];

掉这个方法不会有问题

PHP中文网

id objcMinor;
修改为 __autoreleasing id objcMinor; 就好了

关于void *和id的区别 以及ARC如何处理 可以参考这个链接 http://stackoverflow.com/ques...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号