ことはでき渡す方法としての引数にはObjective-C?
-
21-08-2019 - |
質問
している方法により異なる単一のメソッドの呼び出しで、たいと思いパスメソッドの署名の方法によって異なりの引数として...こんなことが可能なので、Objective-Cやはぎを希望す。
解決
NSInvocationは、オブジェクト内のメソッド呼び出しをラップするためのクラスです。あなたは、セレクタ(メソッドのシグネチャ)を設定インデックスによって引数を設定することができます。その後、目標を設定し、呼び出しをトリガーする、または設定解除の目標を残し、invokeWithTargetを使用するために呼び出す呼び出すことができます。いくつかの並べ替えのループの中で多くのオブジェクトでこれを呼び出すために、
私はそれが少し、このようにうまくいくと思う。
NSInvocation *inv = [[NSInvocation alloc] init];
[inv setSelector:@selector(foo:bar:)];
[inv setArgument:123 atIndex:0];
[inv setArgument:456 atIndex:1];
for (MyClass *myObj in myObjects) {
[inv invokeWithTarget:myObj];
}
それともあなたは、セレクタ(メソッドのシグネチャ)を受け入れSELタイプを使用することができます。このメソッドに呼び出しオブジェクトを渡したいいけない場合ます。
-(void)fooWithMethod:(SEL)selector;
次にのオブジェクトにそれを呼び出すために、呼び出しオブジェクトにセレクタを割り当てる。
他のヒント
それとも、fooWithMethod:(SEL)selector
のアプローチを使用している場合、それは他の引数を持っていない場合、単に、それに[myObject performSelector:selector]
ん。
詳細については、 NSObjectのを参照してください>。
としては前述のとすることができますのセレクタの方法にしたい金がかかる場合があります。を用いセレクタが異なる方法で実際にメソッドを呼び出し:
- を使用
NSObject
sperformSelector:
,performSelector:withObject:
やperformSelector:withObject:withObject:
方法 - を使用
NSInvocation
オブジェクト - または直接利用
objc_msgSend
またはobjc_msgSend_stret
- を使用
IMP
この方法で取得することができる利用methodForSelector:
を使用するかによる。た場合の性能は重要でない利用者数は増加の一途を1が必要な場合は通0,1または2つのオブジェクト。の場合 performSelector:...
方法と一致しない2または3です。以降、設 NSInvocation
オブジェクトが必要な定型コードのう3つことができるようになるのは個人の選択肢がない限り性能。
た場合の性能のメソッドの呼び出しかしい3-4.3すべり速ない限り、キャッシュできるの IMP
s.によってコードを求めることはできないと現実的でないのです。そこで必ずプロのコードは、あります。