2012-04-02 3 views
0

の背後で何が起こっているか@selectorは、より長いC構文の便利な構文ですか? Objective-C言語/コンパイラ?たとえば、私が@propertyを呼び出すとき、引数に応じて、異なる同等のObjective-Cコードがゲッターとセッターに「生成」されることがわかります。 @selectorの裏で何が起こっていますか? Objective-Cメッセージを指定していますか?@selector構文なしでセレクタを指定する方法はありますか?@selector

答えて

3

@selector()は、言語の一部です。 @""のようにリテラルSELを指定すると、リテラルNSStringが指定されます。

@selectorはセレクタを表し、メッセージではありません。セレクタは単なる名前です。それはメッセージのほんの一部です。それは型情報も運びません。

また、@propertyは何も生成しません。これは、オブジェクトが1つまたは2つのセレクタ(getterとsetter)に応答することを保証するだけです。その契約を履行するにはいくつかの方法があります。 @synthesizeはそのうちの1つです。また、必要なメソッドを手動で実装することも、@dynamicを使用して、実行時に何とか処理されることを約束することもできます。

+0

したがって、 '@selector(popViewControllerAnimated:)'は '(SEL *)popViewControllerAnimated:'とほぼ同じですか? –

+0

それは 'SEL'ではなく' SEL * 'ですが、後者が正当な構文であれば基本的に真です。 '@" foo "は'(NSString *)foo'と同じものです。真実の大まかなバージョンについては、それは本当です。 –

2

それは@selectorを使用する方が効率的だがNSSelectorFromStringは、(あなたもNSStringFromSelectorと反対のことを行うことができます)あなたはNSStringからセレクタを作成できます、あなたのタイトルで質問に答えるために。

+0

特に、 '@ selector'ディレクティブはコンパイル時にSELに変換され、' NSSelectorFromString() 'は実行時に呼び出される通常の関数です。 – Chuck

関連する問題