NSLog是否意味着通用写作?

时间:2011-07-28 17:30:46

标签: objective-c

在objective-c中,当我创建一个新项目时,我得到了主要内容:

NSLog(@"Hello, World!");

我在基金会图书馆找不到任何其他简单的写作方法 NSLog是目标c的printf吗?是否建议在生产中使用它在屏幕上打印(命令行工具)?
如果没有,我如何使用Foundation库打印到屏幕?

编辑:
看起来NSLog也增加了时间戳和事物,我认为这只是Xcode控制台 如何使用NSLog之类的格式打印目标c对象而没有时间戳?

4 个答案:

答案 0 :(得分:3)

Objective C是C的超集,因此您仍然可以使用printfscanfNSLog打印时间戳和一些进程信息,并显示在系统控制台中。 NSLog也知道如何打印Obj-C对象(使用%@格式说明符)。

答案 1 :(得分:2)

如果你愿意,你可以做我通常做的事情:定义我自己的打印功能,同样有效,减去时间戳:

void IFPrint (NSString *format, ...) {
    if (!format) return;
    va_list arguments;
    va_start(arguments, format);
    fputs([[[[NSString alloc] initWithFormat:format arguments:arguments] autorelease] UTF8String], stdout); // Omit autorelease call if using ARC.
    va_end(arguments);
}

这种方法的工作方式是它使用NSString的文本解析(确切地说是如何使用%@通过NSLog打印对象),并将其非常简单地打印到屏幕上。它比NSLog快,并且不通过系统日志服务。

答案 2 :(得分:0)

您可以使用printf。如果要打印NSLog和其他Objective-C对象,NSStrings会很方便。

答案 3 :(得分:0)

NSLog用于将调试跟踪写入控制台。 Objective-c并不是真正适合开发基于控制台的应用程序,所以如果这是你想要的,我会查看底层的C库并使用printfscanf,或者像这样:

Objective-C Command Line Framework

关于如何在没有NSLog的时间戳信息的情况下打印出对象的描述,我会使用printf来打印[[myObject description] UTF8String]的输出,因为我认为当你使用打印出对象时NSLog会使用它。 %@格式说明符。