拡張する必要があるメソッドに追加の動作を追加する必要があります。つまり、次のようなメソッドを実装します
- (void)extendMethod:(SEL)selector forClass:(Class)class withCompletionBlock:(void (^)(void))completionBlock;
Class
したがって、インスタンスがSEL
セレクターを使用してメソッドを呼び出すたびに、さらに完了ブロックを呼び出す必要があります。
メソッドの入れ替えを試みましたが、いくつかの問題に遭遇しました。元のメソッドの実装を呼び出したいのです。
必要なものはサブクラス化と非常に似ていますが、これはサブクラス化せずに実装する必要があります。
アップデート:
たとえば、UIViewController
namedのサブクラスがありMyViewController
ます。MyViewController
方法があり- (void)viewDidLoad
ます。アプリケーションのどこかでメソッドを呼び出します
[methodExtender extendMethod:@selector(viewDidLoad)
forClass:[MyViewController class]
withCompletionBlock:^{
NSLog(@"view did load called");
}];
したがって、MyViewController のすべてのインスタンスの viewDidLoad メソッドの後、完了ブロックが呼び出されました。