1

ここ でセレクターを使用する目的は何ですか?

CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];

ソース:初心者のOpenGLes2.0サイトからのコード

定義を読んだ

@selector()ディレクティブを使用すると、完全なメソッド名ではなく、コンパイルされたセレクターを参照できます。

残念ながら、これは私にとってそれをクリアしません。私の専門知識はC#です。したがって、C#で同様のソリューションを実現する方法に答えを関連付けることができれば幸いです。

4

2 に答える 2

6

セレクターは関数の名前を宣言します。それでおしまい。これはReflectionクラスと非常に似ていMethodInfoますが、使用するのがはるかに簡単です。

C#とObjective-Cの比較:C#コードは、長い間使用していないため、少しずれている可能性があることに注意してください。

// C#
using namespace system.reflection;

class someClass {
     void someMethod(object input) {
           string methodName = "doSomething";

           input.getType().getMethod(methodName).invoke(input, new Object[] { });
     }
}

// OBJC
@implementation someClass 

-(void) someMethod:(id) input
{
     SEL methodName = @selector(doSomething);

     [input performSelector:methodName];
}

@end

aの内部SELに関する限り、C-string実行時のルックアップを高速化するためにプライベートマップに配置されています。

于 2012-06-27T20:23:18.350 に答える
0

これらを一緒に説明する2つのリンクを次に示します。1つ目はセレクターに関するAppleのドキュメントで、2つ目はセレクター、デリゲート、およびブロック(比較的新しい)の違いに関するものです。

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocSelectors.html

http://bradcupit.tumblr.com/post/3431169229/ios-blocks-vs-selectors-and-delegates

編集:

ああ、C#ではありませんが、javaScriptなどに精通している場合、セレクターはコールバックに似ています。繰り返しますが、その2番目の投稿は、使用法/類似点/相違点を説明するのに役立ちます。

于 2012-06-27T20:16:58.753 に答える