クラス A に関数 myFunc() があります。この関数を呼び出す他の複数のクラスがあります。
特定のインスタンスでどのクラスが myFunc() を呼び出しているかを調べるにはどうすればよいですか?
誰かがこれで私を助けることができますか?
クラス A に関数 myFunc() があります。この関数を呼び出す他の複数のクラスがあります。
特定のインスタンスでどのクラスが myFunc() を呼び出しているかを調べるにはどうすればよいですか?
誰かがこれで私を助けることができますか?
概念的には、この情報はスタックで利用できますが、簡単には取得できません。ほとんどのソリューションでは、スタック トレースを取得するために例外を作成してから、トレースを読み取る必要があります。私はこれを試していませんが、うまくいくかもしれません:
void myFunc()
{
NSArray *stack = [NSThread callStackSymbols];
// I have no idea if the current function call is at the 0 or last position
// of the array. Experiment here!
}
関連ドキュメント: NSThread Class Reference
呼び出し元に応じて関数の動作を変えたい場合は、DO NOT DO THISに注意してください。callStackSymbols
脆弱です (戻り値の形式が変わるかどうかについての保証はありません)。
単純にパラメータを関数に渡す方がよいでしょう。C 関数のコールバック API を扱っている場合、通常、void *
任意のポインターを渡すために使用できる "context" または "info" パラメーターがあります。これは、オブジェクトへのポインターである可能性があります。
訪問者パターンを使用する
このようにして、カプセル化の概念を順守します。