我正在尝试学习swizzling的概念。
即使我已经添加了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];
}发布于 2013-07-20 20:48:54
您正在使用class_getClassMethod获取实例方法的实现,您应该改用class_getInstanceMethod。
method_exchangeImplementations仍然以相同的方式使用
https://stackoverflow.com/questions/17762374
复制相似问题