Я пытаюсь изучить концепцию swizzling.Метод Swizzling Implentation не имеет места
Несмотря на то, что я добавил method_exchangeImplementations
, все же методы не подвергаются swizzled. Любая идея о том, где я ошибаюсь?
#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];
}
Не используйте swizzling вне единичных испытаний и отладки. Это противоречит политике магазина App Store, и это приведет к ужасно хрупкому коду. – bbum
Swizzling не против политики магазина приложений - было ли это раньше, когда был сделан этот комментарий? Это, безусловно, может привести к хрупкому коду, но также позволяет использовать такие аккуратные вещи, как ориентированный на объект код (например: https://github.com/steipete/Aspects). – powerj1984