【发布时间】:2012-01-25 17:04:57
【问题描述】:
我想知道 Objective-C 中 NSLog 和 Printf 语句之间的区别(出于应用目的......!)
为什么所有开发者都使用NSLog 而不是Printf?
两者看起来相似,但内部工作有何不同?
什么时候可以区分?
【问题讨论】:
标签: iphone objective-c printf nslog
我想知道 Objective-C 中 NSLog 和 Printf 语句之间的区别(出于应用目的......!)
为什么所有开发者都使用NSLog 而不是Printf?
两者看起来相似,但内部工作有何不同?
什么时候可以区分?
【问题讨论】:
标签: iphone objective-c printf nslog
printf() 是一个 C 标准库函数,接受 C 字符串常量 (const char *) 作为其格式参数。 printf() 写入标准输出。
NSLog() 是 Foundation 函数,接受常量 NSString 作为格式,并具有扩展的格式说明符集(例如,printf() 不打印由 %@ 指定的对象,NSLog() 确实)。
NSLog() 还会在打印实际格式并写入 sdterr 之前打印进程名称和日期。
基本上,我们可以说NSLog() 是一个扩展的printf()
用于 Objective-C(更准确地说是 Cocoa 和 Cocoa Touch)和特定用途的样式函数。
【讨论】:
NSLog 类似于 printf,但功能更多:
@ 运算符,以显示对象的 description 方法提供的字符串。 (description 是 NSObject 的一部分,因此所有对象都可以覆盖它以返回描述该对象的字符串)。【讨论】:
os_log 构造。
从开发者的角度来看,最大的不同在于 NSLog 通过 %@ 格式支持 Objective-C 对象类型。 NSLog 也写入 stderr,而 printf 写入 stdout。
【讨论】:
我发现NSLog 和printf 之间有两个主要区别:
NSLog 通过%@ 扩展支持NSString 对象;
此外,NSLog 自动添加时间和流程数据(例如,2012-01-25 17:52:10.479 流程[906:707])
【讨论】:
NSLog supports objects through the %@ extension, by implicitly calling that object's -(NSString*) description; method