在imp_implementationWithBlock中使用va_list在iOS 11上获取EXC_BAD_ACCESS

时间:2017-08-25 07:26:34

标签: ios exc-bad-access ios11

我将设备升级到iOS 11-beta6,然后我发现运行代码存在问题。

IMP swizzledImplementation = imp_implementationWithBlock(^BOOL(NSObject *obj, ...) { 
   va_list arguments;
   va_start(arguments, obj);
   id argument = va_arg(arguments, id);
   va_end(arguments);
};

当我尝试使用va_arg获取obj之后的第一个参数时,应用程序运行到EXC_BAD_ACCESS。但是在iOS模拟器和ios 10/9/8上的一些设备上的代码是正常的(它也在一些ios 10.2设备上崩溃)。

va_list有什么变化吗?还是imp_implementationWithBlock?

1 个答案:

答案 0 :(得分:0)

我想我发现了问题,https://forums.developer.apple.com/thread/38470

  

在64位ARM varargs例程中,使用标准例程中的不同调用约定,因此使用varargs块实现非varargs方法根本不可行。