0

私はスウィズリングの概念を学ぼうとしています。

を追加しましmethod_exchangeImplementationsたが、まだメソッドが入れ替わっていません。私がどこで間違っているのかについて何か考えはありますか?

#import <objc/runtime.h>

@interface POCViewController ()

- (void)addSwizzle;
- (void)originalMethod;
- (void)swizzledMethod;

@end

@implementation POCViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

    //Add swizzle
    [self addSwizzle];

    //Call the original method
    [self originalMethod];
}

- (void)addSwizzle
{
    Method original, swizz;

    original = class_getClassMethod([self class], @selector(originalMethod));
    swizz = class_getClassMethod([self class], @selector(swizzledMethod));
    method_exchangeImplementations(original, swizz);
}

- (void)originalMethod
{
    NSLog(@"Inside original method");
}

- (void)swizzledMethod
{
    NSLog(@"Inside swizzled method");
    [self swizzledMethod];
}
4

1 に答える 1

1

class_getClassMethodインスタンスメソッドの実装を取得するために使用していますが、class_getInstanceMethod代わりに使用する必要があります。

method_exchangeImplementations今でも同じように使われています

于 2013-07-20T12:48:54.070 に答える