[iOS]深入理解__bridge - OC对象与C++对象的引用转换

  1. 云栖社区>
  2. 博客>
  3. 正文

[iOS]深入理解__bridge - OC对象与C++对象的引用转换

知兵 2016-08-06 11:30:40 浏览6479
展开阅读全文

0x0 crash

昨天在iOS Geekers钉钉群里聊到一个问题, 下面的代码会crash:

    void* a = new char;
    id ext = (__bridge id)a;

crash现场如图:
screenshot

看看挂的地方:
screenshot

挂在objc_retain里面:
screenshot

objc_retain的作用是对oc对象做retain用的, 我们对指令做一下简单的解析:

libobjc.A.dylib`objc_retain:
    0x1810d00a0 <+0>:  cbz    x0, 0x1810d00c8           ; <+40>    // 判断x0也就是传进来的第一个参数是不是nil, 在这里x0是变量a, 也就是char类型的指针
    0x1810d00a4 <+4>:  tbnz 

网友评论

登录后评论
0/500
评论
知兵
+ 关注