UPDATE維持しながら、各メソッドにコンテキスト認識コードを挿入:ジョージといくつかの重要な提案と、前後でAOP:DRY
を、私はには2つの異なる方法を作ってみました私はCodeRunnerに欲しいものを正確に達成し、GitHubのの要旨サイト上に掲載:それは新しい概念だと私はちょうど午前1:30で終了するので Objective-C AOP gist
コードが粗いです。それは間違いなく動作し、イニシャライザ、ゲッタまたはセッタではないすべてのメソッドを自動追加するようないくつかの細心の注意があります。 [END UPDATE]
私は、クラス内の各メソッドに対して状況依存コードを呼び出すことができる場合は、私のコードが少しDRYerになる状況に遭遇しました。 Objective-Cランタイムの使用はまったく問題ありません。私はCやC++のソリューションも受け入れます。
の代わりに:
- (void)methodName1
{
self->selector = _cmd;
NSLog(@"This method is named: %@",_cmd);
//more code
}
- (void)methodName2
{
self->selector = _cmd;
NSLog(@"This method is named: %@",_cmd);
//more code
}
が結果は同じであることで、このような何かを持っている:
+ (void)AOPMethod
{
self->selector = _cmd;
NSLog(@"This method is named: %@",_cmd);
}
- (void)methodName1
{
//more code
}
- (void)methodName2
{
//more code
}
を実際のアプリケーションでは、AOPMethodは、より多くのコードを含んでいるでしょうし、そこになるだろうクラス内のより多くのメソッド。
P.S.私はDRYにかなり執着しています。散文とパフォーマンスの明確さに加えて、それは長期的に私のコードの品質をどのように評価するかの重要な要素です。私が自分自身を繰り返すことを避けることができる新しい方法ごとに、多くのプロジェクトで共有されている再利用可能なクラスで可能な限り多くのコードを分解するので、利点は指数関数的です。
入力/出力傍受を探していますか? –
@GeorgFritzsche質問ありがとうございます。 メソッド代行受信がプラットフォームに依存しない場合、_cmdなどのメソッドレベルの状況依存データをクラスの各メソッド(コードの重複なし)で使用できるようにします。 言い換えれば、後者の例のいくつかのバージョンが前者と同じ結果を持つことができる、言及されている基本言語(すべてのプラットフォームで利用できないフレームワークではない)のいずれかで技術を共有できる場合、回答。再度、感謝します。 –
あなたの特定のユースケース(同じ署名を持つすべてのメソッド)[このアプローチ](http://stackoverflow.com/questions/9242571/copy-a-method-imp-for-multiple-method-swizzles)メソッドリスト内のすべての適切なメソッドにパッチを適用するように拡張されました。現時点では、私はよりエレガントでより一般的な解決策を考えることはできません。 –