Skip to content

madordie/PerformDemo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PerformDemo

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
  • 两处崩溃位置并不相同

详细的问题描述放在了一个意外

About

“iOS的那几个__bridge*究竟做了啥”的源码项目

Resources

Stars

Watchers

Forks