2014-10-02 2 views

ответ

2

Для печати только имя метода, используйте

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

Для аргументов метода печати, является сложной задачей. Каждое сообщение в ObjectiveC преобразуется в objMsgSend (id self, SEL, arg0...)
Нам нужно пройти через стек и распечатать его, как мы видим после того, как _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, что делает именно то, что вы хотите, но работает только под Simulator.

+0

Блестящий, спасибо. Есть ли вариант этого для аргументов метода печати? –

+0

@GauravSharma Я постараюсь сделать это и дам вам знать. – l0gg3r

Смежные вопросы