2011-12-03 15 views
0

値を返した後に関数内でアクションを実行する方法があるかどうか疑問に思っていました。戻り値の後にアクションを実行

つまり、文字列を返すメソッドがあります。文字列が返された後、メソッドが条件が満たされているかどうかをチェックして通知などを送信できるように、メソッドが別のアクションを実行するようにします。それはどういうわけか可能ですか?

私はアプリケーションにいくつかのプロットを追加するためにcore plotというフレームワークを使用しています。残念ながら、このフレームワークにdidFinishAddingPlotメソッドはありません。だからプロットがプロットを終えるたびに私に通知する仕組みを手動でプログラムする必要があります。 addPlotメソッドが呼び出されると、値の配列を通り、特定のインデックスの値をプロットする別のメソッドが呼び出されます。私の考えは、インデックスがmy values配列の数と等しいかどうかを調べるために "if(condition)"ブロックを入れて、最後の値をフェッチしていることを知っていました。しかし、最初にプロットを完了したというメッセージを送る前に値を返す必要があります。それ以外の場合、最後の値は渡されません。

+0

これはおそらく、あなたが望むことをするために、何らかの形のメッセージパッシングシステムとマルチスレッドが必要になるでしょう。戻り値の後に何かを行うことは可能ではないだけでなく、呼び出しを行っている関数が実行を再開するまで返された値を受け取らないので非常に有用ではありません。 – Hobblin

+0

このメソッドの目的が文字列を返すことである場合、文字列に関連しないものを実行すると、おそらくデザインが悪くなります。 –

+0

私の編集をチェックしてください – iJatrat

答えて

1

関数がreturn文にヒットすると、関数は実行を停止します。あなたが戻ってくる前に何をしたいかを実行する必要があります。

+0

または(タイマーまたは遅延実行を使用して)ある程度の時間が経過した後、または別のスレッドで、またはキュー上の操作またはブロックとして、またはコード内の他の場所で実行されます。最後のものが最良の解決策になるかもしれません。 –

0

したがって、関数またはメソッドから値を返したい場合は、定義によってコール・サイトに制御(および回答)が返されます。それには、不可能です。あなたがコントロールを返したので、あなたは完了です。

しかし、あなた(例えば)は、後にいくつかのクリーンアップタスクを実行するために、あなたのメソッドの実行中に新しいスレッドを生むことができます。

質問にCocoaとタグ付けされているので、AppleのThreaded Programming Guideをチェックしてください。これは、NSThread、POSIXスレッドなどについて教えてくれます。

関連する問題