1

これは非常に単純で、答えが見つからないほど頭がおかしくなりそうです。

メソッドは、それを呼び出したインスタンスをどのように参照できますか?

例: クラス alpha のいくつかのメソッドには、「[bravo charley]」があります。

charley メソッドに "[alpha-instance delta];" を実行させたい 「[bravo charley]」を実行した alpha の特定のインスタンスを使用します。しかし、charley はアルファまたはそのインスタンスについて何も知りません。

つまり、alpha-instance のメソッドによって呼び出された charley メソッド内から alpha-instance への参照を取得するにはどうすればよいでしょうか?

私は次のようなことができます

in bravo.h:
    -(id) charley:(id)invoker;
in alpha.m:
    [bravo charley:self];

そして「[invoker delta];」チャーリー法ですが、それはかなり醜いようです。

4

2 に答える 2

11

これを達成するための一般的なイディオムは、sender多かれ少なかれあなたの例のように、メッセージで呼び出されるパラメーターを渡すことです。これは、たとえば、ユーザー インターフェイス アクションとしてバインドされたメソッドを指定する方法です。

-(IBAction)doTheThing:(id)sender

メッセージを送信したオブジェクトを取得する組み込みの方法はなく、必要になることはほとんどありません。

于 2009-09-28T13:30:09.537 に答える
1

明確にするために、メソッドは常に別のオブジェクトによって呼び出されるとは限らないため、ランタイムはそのような情報を確実に提供することはできません。例えば、


int main (int argc, char *argv[])
{
    SEL releaserSel = @selector(release);

    NSObject *someObject = [[NSObject alloc] init];

    IMP releaserImp = [someObject methodForSelector:releaserSel];

    releaserImp (someObject, releaserSel);

    // someObject has been released!
    return 0;
}

あなたが思っているほど珍しいものではないかもしれません。メソッドを直接呼び出すと、メッセージを送信するよりもはるかに高速になります (同じメッセージが同じオブジェクトに何度も送信される場合に役立ちます)。

于 2009-09-28T21:54:08.257 に答える