NSlog的前世今生 - FuThD/FuThD.github.io GitHub Wiki

#OC中NSlog探究

###NS NS 是保留的NeXTSTEP 80年代末的Unix, 现在MacOS沿用当时的库(legacy code),所以对应的函数名也保留以NS开头。

###log log不是缩写,就是 log。 log 本意原木(语源可能是古诺尔斯语 lág),后来引申为船只航行用来测速的 chip log 测程板,长这样: log

在航行的时候把 chip log 抛下,chip log 的阻力很大,便会悬浮在水中,这样通过测量一段时间内绳子伸出的长度就可以测量航速(航速单位节 knot 也是这么来的)。而利用航速测出的航行日志则会写在 logbook 上。 后来,航海中的 log 就被扩展到了更多的领域,表示记录和日志了。 至于 logarithm,则是来自希腊语 λόγος(比例)和 ἀριθμός(数)。

如图 航海日志

  1. 熟悉 Unix 以及衍生系统的人都明白,log 是用来记录所有类型 “输出” 的文本文件(也有不是文本的 log,比如 pf 的默认输出就不是纯文本)。
  2. 谈到 “输出” 的时候,我们一般会想到四种类型的输出:标准输出(stdout),错误输出(stderr),内核标准/错误输出(在控制台会以高亮显示)。
  3. log 和 “输出” 的明显区别就是,前者带时间戳(基本上是 log 带会带),而后者未必带,或者说一般情况下都不带。 4。 “输出” 可以转化为 log(可以自己处理,也可以通过系统自动处理)

所以从以上四点来看 NSLog 却是可以叫 log,因为包含了时间戳;也可以是 “输出”,因为 NSLog 会把参数内容输出到 “标准输出”,运行相关 Objective C 程序后可以直接看见。

最后,NSLog 之所以用来做 “输出” 函数名,是大家的误解。其实 NSLog 就是实实在在用来 log 的,给你用来 “输出” 只是一个副作用;因为 Objective C 就是用来写 GUI 的语言,不是给你写程序在控制台下输出什么东西的(虽然也可以做到这一点)。