Как напечатать имя метода, в котором я есть, в Objective-C?Печать текущего метода в Objective-C
В Java/C# я мог бы сделать это с помощью отражения. Возможно ли подобное с Objective-C?
Как напечатать имя метода, в котором я есть, в Objective-C?Печать текущего метода в Objective-C
В Java/C# я мог бы сделать это с помощью отражения. Возможно ли подобное с Objective-C?
Для печати только имя метода, используйте
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.
Блестящий, спасибо. Есть ли вариант этого для аргументов метода печати? –
@GauravSharma Я постараюсь сделать это и дам вам знать. – l0gg3r