我在 ARMv7 IOS 设备上使用标准方法 swizzling,它对我来说非常完美。
但是当我为 arm64 编译代码时 - 它无法从新方法调用原始方法
我调配的主要目的 - 在另一种方法中使用来自我的应用程序内部方法的参数。
我有原始方法-(void)insertdata:(id)text
,我想更改它-(void)patchedCall:(id)text
并在新方法中调用原始方法。
代码:
static IMP sOriginalImp = NULL;
@interface TextOverrides: NSObject
+(void)load;
-(void)patchedinsert:(id)text;
@end
@implementation TextOverrides
+(void)load
{
//Get Implementation of original method
Class originalClass = NSClassFromString(@"DataViewController");
Method originalMeth = class_getInstanceMethod(originalClass, @selector(insertdata:));
//Save original method implementation
sOriginalImp = method_getImplementation(originalMeth);
// Get implementation of replacement method
Method replacementMeth = class_getInstanceMethod(NSClassFromString(@"TextOverrides"), @selector(patchedCall:));
//Replace methods
method_exchangeImplementations(originalMeth, replacementMeth);
}
-(void)patchedCall:(id)text
{
@synchronized(self){
//Call of original method that we save
sOriginalImp(self, @selector(insertdata:), text);
//Make our code for argument "text"
printf("Here is data%s\n", [text UTF8String]);
}
}
@end
代码在 arm64 架构上调用原始方法失败:
//Call of original method that we save
sOriginalImp(self, @selector(insertdata:), text);
如何改进我的代码以在 armv7 和 arm64 上工作?