小编Yak*_*kov的帖子

Objective-c IOS arm64方法调配失败调用原始方法

我在ARMv7 IOS设备上使用标准方法调配,它对我来说非常完美.

但是当我编译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 …
Run Code Online (Sandbox Code Playgroud)

objective-c objective-c-runtime ios arm64 method-swizzling

5
推荐指数
1
解决办法
507
查看次数