如何在Objective-C中打印我所使用的方法的名称?
在Java / C#中我可以使用反射来做到这一点。与Objective-C类似的可能吗?
答案 0 :(得分: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,它完全符合您的要求,但它仅适用于模拟器。