2017-08-25 5 views
0

Je mets à jour mon appareil vers iOS 11-beta6, puis j'ai trouvé que quelque chose de problème avec le code d'exécution.En utilisant va_list dans imp_implementationWithBlock obtenir EXC_BAD_ACCESS sur iOS 11

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

Quand j'essaie d'utiliser va_arg pour obtenir le premier argument après obj, l'application fonctionne en EXC_BAD_ACCESS. mais le code est OK sur le simulateur iOS et certains appareils sur ios 10/9/8 (il est également crash sur certains appareils ios 10.2).

Y a-t-il des changements avec va_list? ou imp_implementationWithBlock?

Répondre

0

Je pense que je trouve le problème, https://forums.developer.apple.com/thread/38470

donc sur ARM 64 bits VarArgs routines utilisent différentes conventions d'appel de routines standard, la mise en œuvre d'une méthode non-varargs avec un bloc varargs est tout simplement impossible.