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

问题描述:

我将设备升级到iOS 11-beta6,然后发现运行时代码出现问题。在imp_implementationWithBlock中使用va_list在iOS 11上获取EXC_BAD_ACCESS

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设备上也会崩溃)的代码是OK的。

va_list有什么变化吗?或imp_implementationWithBlock?

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

在64位的ARM可变参数例程使用从标准例程不同的调用约定,从而执行非可变参数的方法与可变参数块是不可行的。