如果你想知道哪些方法調用你的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
,這是因爲你通過performSelector
調用methodTwo
。如果你改變這種方式你methodOne
...
-(void)methodOne {
[self methodTwo:nil];
}
...輸出是...
0x000022fe -[CMAppDelegate methodOne] + 62
0x000025d6 -[CMAppDelegate application:didFinishLaunchingWithOptions:] + 374
...就是這樣。你的問題得到解答,但我不知道爲什麼你想要這個。你可能不想知道哪個方法確實調用了你的方法,但是哪個對象啓動了這個調用鏈。一個例子是按鈕 - 你可以有一個方法來處理更多的按鈕,並有sender
參數來區分@stavash指出的這些按鈕。
似乎你在我還在打字時在我面前提到了'NSThread'的調用堆棧方法! :-P – 2012-07-21 09:11:09