首页 > getReturnValue 获取对象Crash

getReturnValue 获取对象Crash

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


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

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


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

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

 [invoMajor setSelector:@selector(minor)];

掉这个方法不会有问题

【热门文章】
【热门文章】