サーチ…


NSInvocation Objective-C

このオリジナルPoste.Jamesによって参照してください

AppleのNSInvocationクラスリファレンスによると:

NSInvocationは、Objective-Cメッセージが静的にレンダリングされたものです。つまり、オブジェクトに変換されたアクションです。

そして、 もう少し詳しく:

メッセージの概念は、客観的な考え方の中心です。メソッドを呼び出したり、オブジェクトの変数にアクセスしたりすると、メッセージを送信します。 NSInvocationは、異なる時点でオブジェクトにメッセージを送信する場合や、同じメッセージを複数回送信する場合に便利です。 NSInvocationでは、送信しようとしているメッセージを記述してから、実際に呼び出す (実際には対象オブジェクトに送信する)ことができます。


たとえば、文字列を配列に追加するとします。通常、 addObject:メッセージを次のように送信します。

[myArray addObject:myString];

ここで、 NSInvocationを使用して、ある時点でこのメッセージを送信するとします。

まず、 NSMutableArrayaddObject: selectorで使用するNSInvocationオブジェクトを準備します。

NSMethodSignature * mySignature = [NSMutableArray
    instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
    invocationWithMethodSignature:mySignature];

次に、メッセージを送信するオブジェクトを指定します。

[myInvocation setTarget:myArray];

そのオブジェクトに送信するメッセージを指定します。

[myInvocation setSelector:@selector(addObject:)];

そして、そのメソッドの引数を記入してください:

[myInvocation setArgument:&myString atIndex:2];

オブジェクト引数はポインタによって渡されなければならないことに注意してください。 Ryan McCuaigに指摘していただきありがとうございます。詳細はAppleのマニュアルをご覧ください。

この時点で、 myInvocationは送信可能なメッセージを記述する完全なオブジェクトです。実際にメッセージを送信するには、次のように呼び出します。

[myInvocation invoke];

この最後のステップでは、メッセージが送信され、基本的に[myArray addObject:myString];実行され[myArray addObject:myString];

電子メールを送信するように考えてください。新しい電子メール( NSInvocationオブジェクト)を開き、送信先の人物(オブジェクト)のアドレスを記入し、受信者のメッセージを入力し( selectorと引数を指定)、[送信]をクリックします。 (呼び出しをinvoke )。

詳細は、「 NSInvocationの使用参照してください。


NSUndoManagerNSInvocationオブジェクトを使用して、コマンドを逆にすることができます。基本的に、あなたがやっていることは、「ちょっと、私がやったことを元に戻したいのであれば、これらの引数を使ってこのメッセージをそのオブジェクトに送ります」と言うNSInvocationオブジェクトを作成することです。 NSInvocationオブジェクトをNSUndoManager 、そのオブジェクトを取り消し可能なアクションの配列に追加します。ユーザーが「元に戻す」をNSUndoManagerと、 NSUndoManagerは配列内の最新のアクションを検索し、格納されたNSInvocationオブジェクトを呼び出して必要な処理を実行します。

詳細については、「 元に戻す操作の登録 」を参照してください。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow