iOS的那几个__bridge*究竟做了啥的源码, 一个会崩溃的demo
崩溃的解决方案:
╰─>$ git diff
diff --git a/PerformDemo/NSObject+test.m b/PerformDemo/NSObject+test.m
index 828f7c1..a5c70aa 100644
--- a/PerformDemo/NSObject+test.m
+++ b/PerformDemo/NSObject+test.m
@@ -30,11 +30,11 @@ - (id)performSelector:(SEL)aSelector withObjects:(NSArray *)objects {
}
[invocation invoke];
//返回值处理
- id callBackObject = NULL;
+ void* callBackObject = NULL;
if(methodSignature.methodReturnLength) {
[invocation getReturnValue:&callBackObject];
}
- return callBackObject;
+ return (__bridge id)callBackObject;
}
}
并未修改在仓库中
使用LLDB进行单步调试和直接运行崩溃位置不同, 确切来说 直接运行的时候崩溃位置更接近代码异常的位置.
重现步骤:
- 在NSObject+test.m#L37设置断点
- |─>场景一: 执行
continue
- ╰─>场景二: 一直执行
next
- 两处崩溃位置并不相同
详细的问题描述放在了一个意外