【问题标题】:Difference between NSLog and Printf statement for ObjectiveCObjective C 的 ANALog 和 Printf 语句之间的区别
【发布时间】:2012-01-25 17:04:57
【问题描述】:

我想知道 Objective-C 中 NSLogPrintf 语句之间的区别(出于应用目的......!)

为什么所有开发者都使用NSLog 而不是Printf

两者看起来相似,但内部工作有何不同?

什么时候可以区分?

【问题讨论】:

    标签: iphone objective-c printf nslog


    【解决方案1】:
    • printf() 是一个 C 标准库函数,接受 C 字符串常量 (const char *) 作为其格式参数。 printf() 写入标准输出。

    • NSLog() 是 Foundation 函数,接受常量 NSString 作为格式,并具有扩展的格式说明符集(例如,printf() 不打印由 %@ 指定的对象,NSLog() 确实)。 NSLog() 还会在打印实际格式并写入 sdterr 之前打印进程名称和日期。

    基本上,我们可以说NSLog() 是一个扩展的printf() 用于 Objective-C(更准确地说是 Cocoa 和 Cocoa Touch)和特定用途的样式函数。

    【讨论】:

      【解决方案2】:

      NSLog 类似于 printf,但功能更多:

      • 将时间戳添加到输出中。
      • 输出被发送到 Xcode 控制台,或任何标准错误定义。
      • 它接受所有 printf 说明符,但它也接受对象的 @ 运算符,以显示对象的 description 方法提供的字符串。 (description 是 NSObject 的一部分,因此所有对象都可以覆盖它以返回描述该对象的字符串)。
      • 输出还会发送到 Apple 系统日志 (ASL),它是 Apple 的 syslogd 版本。其他应用程序可以使用 C API 或 OS X 用户使用“控制台”应用程序来读取这些数据。

      【讨论】:

      【解决方案3】:

      从开发者的角度来看,最大的不同在于 NSLog 通过 %@ 格式支持 Objective-C 对象类型。 NSLog 也写入 stderr,而 printf 写入 stdout。

      【讨论】:

        【解决方案4】:

        我发现NSLogprintf 之间有两个主要区别:

        1. NSLog 通过%@ 扩展支持NSString 对象;

        2. 此外,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
        • 第三个最大的不同是NSLog将输出发送到stderr,而printf发送到stdout。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-14
        • 1970-01-01
        • 2020-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多