2014-10-02 34 views

回答

2

對於剛剛印刷方法的名稱,使用

NSLog(@"%@", NSStringFromSelector(_cmd)); 

要印刷方法的參數是一項複雜的任務。我們需要遍歷堆棧並將其打印出來,正如我們在_cmd + sizeof(SEL)將給予arg0地址(但arg0的大小和類型未知)之後所看到的那樣, 。

Method method = class_getInstanceMethod([self class], _cmd); 
unsigned nargs = method_getNumberOfArguments(method); 
void *start = _cmd; 
for(unsigned i = 0; i< nargs ; i++) { 
    char *argtype = method_copyArgumentType(method, i); 
    //find arg size from argtype 
    // walk stack given arg zie 
    free(argtype); 
} 

基本實現應該看起來像這樣。所以如果參數是對象,那將是很棒的(因爲我們知道參數的大小是32/64位)。否則,我們需要進行類型編碼,並按參數的大小移動光標。看看https://github.com/holtwick/HOLog,這正是你想要的,但它只適用於模擬器。

+0

輝煌,謝謝。對於打印方法參數是否還有其他變體? – 2014-10-02 08:27:09

+0

@GauravSharma我會盡力去做,並會告訴你。 – l0gg3r 2014-10-02 08:37:13