NSScreencast Episode #124 Method Swizzling
Method Swizzling - NSScreencast
Objective-C runtimeでメソッドの実装を置き換える
- #import <objc/runtime.h>
- swizzle - がぶ飲みする、かき混ぜ
- class_getInstanceMethod
- class_addMethod
- method_getImplementation
- method_getTypeEncoding
- method_exchangeImplementations
- category
- Foo+Swizzling
- fkb_bar
- [self fkb_bar]; <- 実態は元のメソッド
- FKBSwizzler helper
- [FKBSwizzler swizzleClass:self selector:@selector(bar) newSelector:@selector(fkb_bar)];
- UIViewController+Analytics.m
- load
- viewDidAppear ⇄ fkb_viewDidAppear
- fkb_viewDidAppear
- [self fkb_viewDidAppear:animated]; <- オリジナルの挙動
- NSLog(@"viewDidAppear: called on %@ (animated? %@)", self.title ?: self.class
- load