我在iOS应用中使用NSLoger,它很棒,它可以显示函数名,文件行,我只想显示类信息的实例。
例如:A类方法是' doAction',实例:A * a = [A alloc];
in method 'doAction':
{
NSLog(@"out this instance information, do not need repeat set the argument [%@]",self );
}
我的意思是我不需要定义格式和' self'每个NSLog语句中的参数....
怎么做?我可以清楚解释一下,需要你的帮助谢谢。
所以...然后我尝试添加一些代码如下:
void LogMessageMe( const char *filename, int lineNumber, const char *functionName,id target, int level, NSString *format, ...)
{
NSString* strTarget = [target description];
va_list args;
va_start(args, format);
LogMessageTo_internal(NULL, filename, lineNumber, functionName, strTarget, level, format, args);
va_end(args);
}
和
#define NSLogMe(...) LogMessageMe( __FILE__, __LINE__, __FUNCTION__, self, 0, __VA_ARGS__)
呼叫代码如下:
NSLogMe(@"didFinishLaunchingWithOptions");
然后输出日志:
<AppDelegate: 0x906e100> | Main thread | didFinishLaunchingWithOptions
这就是我想要看到的......因为在应用程序中,许多实例都是创建但是同一个类...如果没有标识号,则很难跟踪目标实例....
但仍然是一个问题...
IDE报告有关该语句的警告消息:
NSLogMe(@"didFinishLaunchingWithOptions");
&#34;函数'LogMessageMe'的隐式声明在C99&#34;
中无效 这似乎是小问题......有人帮忙吗?感谢。答案 0 :(得分:0)
使用NSLog语句中的%p
说明符输出指针的值:
NSLogMe(@"Called from %@ instance %p", [self class], self);
这些是标准的[NSString stringWithFormat:...]
说明符。有关完整列表,请参阅string format specifiers的文档。
答案 1 :(得分:0)
警告与NSLogger无关。
您需要在功能签名NSLogMe
可见的位置定义宏LogMessageMe
。
如果您在LogMessageMe
之外声明LoggerClient
,那么您需要公开LogMessageTo_internal
(现在它不是,正如其名称所示)。