Iphone 如何清除NSLog中的所有垃圾?
当我使用Iphone 如何清除NSLog中的所有垃圾?,iphone,objective-c,cocoa,cocoa-touch,uikit,Iphone,Objective C,Cocoa,Cocoa Touch,Uikit,当我使用 NSLog(@"fooBar") 它打印出很多我不想要的东西: 2009-09-03 13:46:34.531 MyApp[3703:20b] fooBar 有没有一种方法可以在没有这个大前缀的情况下将内容打印到控制台? 我想在控制台中画一张表和一些其他东西,这样空间就至关重要了……NSLog只需打印到strerr。改用fprintf fprintf(stderr, "foobar"); 这是Mark Dallymple在borkware.com上的留言 更安静的NSLog(常
NSLog(@"fooBar")
它打印出很多我不想要的东西:
2009-09-03 13:46:34.531 MyApp[3703:20b] fooBar
有没有一种方法可以在没有这个大前缀的情况下将内容打印到控制台?
我想在控制台中画一张表和一些其他东西,这样空间就至关重要了……NSLog只需打印到strerr。改用fprintf
fprintf(stderr, "foobar");
这是Mark Dallymple在borkware.com上的留言 更安静的NSLog(常规->黑客)[permalink]
// NSLog() writes out entirely too much stuff. Most of the time I'm
// not interested in the program name, process ID, and current time
// down to the subsecond level.
// This takes an NSString with printf-style format, and outputs it.
// regular old printf can't be used instead because it doesn't
// support the '%@' format option.
void QuietLog (NSString *format, ...)
{
va_list argList;
va_start (argList, format);
NSString *message = [[[NSString alloc] initWithFormat: format
arguments: argList] autorelease];
printf ("%s", [message UTF8String]);
va_end (argList);
} // QuietLog
这是borkware Quicks的一个变体:。它打印日志发生位置的文件和行号。我一直都在使用它。如果我弄错了,请纠正我,但是:我真的可以在函数定义的末尾写…)以指示“您希望再添加多少参数”?您可以。这是有效的C。继续尝试吧。这可能是最优雅的解决方案,fprintf是最快的。请注意,如果您使用fprintf,您必须确保进入其中的所有内容都是C字符串,但QuietLog将采用与NSLog完全相同的参数。这将起作用。。。但是printf(“%s”,…)效率低下。如果你把它称为一堆,你可能想避免自动释放(最后释放消息)。请参阅:如果您想让这个方法变得非常优雅,请在此方法中添加一个编译器标志,允许您使用开关关闭打印,这样您就不会用一堆垃圾控制台消息填充发布应用程序。-1此答案不完整,因为printf和fprintf不处理带/o转换的Objective-C字符串。一旦传入NSString,程序就会崩溃。另外,其他答案可以在一个位置更改输出位置。
NSLog()
不仅仅打印到stderr
。它还通过com.apple.console
功能以ASL\u级别警告的方式登录到系统日志。您可以使用asl(
3)
手册页中讨论的函数执行相同的操作。这就是说,如果您正在绘制一个ASCII表,您可能真的不想记录到系统日志中。只要在适当的时候写信给stdout
/stderr
;正如前面所述,fprintf无法处理w/对象。此外,由于询问者试图用文本输出“绘制一个表”,请注意,对QuietLog()的每次调用都以换行结束,就像NSLog()一样。如果您需要打印一行包含多个语句的文本,我建议使用printf()
和-[NSString UTF8String]
。可能存在重复