どのメソッドが自分のを呼び出すかを知りたい場合はmethodTwo
、呼び出しスタックを調べることができます。これを見て...
-(void)methodOne {
[self performSelector:@selector(methodTwo:)];
}
-(void)methodTwo:(id)sender {
NSLog( @"%@", [NSThread callStackSymbols][1]);
NSLog( @"%@", [NSThread callStackSymbols][2]);
}
...そしてログ出力(簡略化)は...
0x014ef671 -[NSObject performSelector:] + 62
0x00002307 -[CMAppDelegate methodOne] + 55
...コールスタックシンボルでcallStackSymbols
返さNSArray
れるので、インデックス1を調べて、メソッドを呼び出したメソッドを取得できます。ご覧のとおり、がありますNSObject
。これは、を介しperformSelector
て呼び出したためです。このように変更すると...methodTwo
performSelector
methodOne
-(void)methodOne {
[self methodTwo:nil];
}
...出力は...
0x000022fe -[CMAppDelegate methodOne] + 62
0x000025d6 -[CMAppDelegate application:didFinishLaunchingWithOptions:] + 374
... それでおしまい。あなたの質問は答えられますが、なぜあなたはこれが欲しいのか分かりません。どのメソッドがメソッドを正確に呼び出したかを知りたくないかもしれませんが、どのオブジェクトがこの呼び出しチェーンを開始したかを知りたくありません。例はボタンです-より多くのボタンを処理する1つの方法がありsender
、@stavashが指摘したようにこれらのボタンを区別するための引数があります。