OneV's Den

上善若水,人淡如菊

嗨,我是王巍 (@onevcat),一名来自中国的 iOS / Unity 开发者。现居日本,就职于 LINE。正在修行,探求创意之源。


ObjC 中国与 objc.io 合作最新作品《函数式 Swift》,《Core Data》,《Swift 进阶》及《集合类型优化》已经发布泊学网正在开展订阅赠书活动,也欢迎前往了解

Log的艺术,顺带赞NSLogger

写代码易,调程序难。不论是多么资深的程序员,都不可能在毛线球一般的代码中弄清到底发生了什么,特别是当在程序在N多个线程中来回跳转和涉及到难以理解的内存操作的时候,我们不可避免地需要log的帮助来整理思路,确认到底发生了什么。而这时候,输出log的好坏和时机,往往决定了花在调试上的时间。

其实某种程度上来说,log是一门艺术,而从输出log上往往也能判断程序员的水平。新手往往都很可爱,NSLog(@”Hello World”)会是不变的模式。不得不承认这样的输出如果在恰当的时候也能一击致命,但是它所能带给我们的信息量实在太少了。水平再高一点的程序员大概会在关键事件的时候在保证代码通用性的前提下使用诸如__func__之类的东西监测程序流程。高级程序员在log方面就会显得大巧若拙,也许会把整个代码流的行为都进行log,而不漏掉任何一个细节,包括所有的内部状态、各种事件、异常等,完全受掌控的代码和预期中的程序行为是他们成功的关键。而传说中的大牛级人物可能把更多的注意力放在线程,网络等时序上可能出错的地方,无谓的内存释放或是某个超时的网络请求都不会遗漏。

其实在面对纷繁芜杂的输出需求的时候,Cocoa环境默认的NSLog基本就是个废品:它不能给输出分门别类,不能按照需求输出除了字符的格式,也不能兼顾线程区别对待。而在高水平log的要求中,这些都应当是提供给开发者最基本、最便利的输出方式。

于是NSLogger出现了,在Florent Pillet的打造下,一个开源强力的输出工具给了log这一古老的工作崭新的生命。标签输出,优先级查找,直接输出图像,多线程标记,时序控制,甚至是通过网络log到别人的终端或者是从别人的终端程序中记录log。在这里,只有想不到没有做不到,堪称是史上最为强大的logger,而且最重要的是他是BSD License的。在我看来,任何apple开发者都不应该错过他。

最近的文章

直到我膝盖中了一箭...

这句话就这么火了。其实通宵等了一夜天际,但是之后却一直没有大块时间,所以至今主线还没有玩完,今年之内估计也是没有机会完结了。在2011年各种组织评选年度游戏之前,我想我得为老滚5写点什么。今年是大作频出的年份,传送门2,巫师2,刺客信条:启示录,英雄无敌6,新的COD…当然,还有让人等了五年的上古卷轴5。一个人的一生并没有多少个五年可以等,而这个世界上也没有多少游戏值得人们等待五年。恰恰上古卷轴就是这样的一款游戏,优点的评说似乎都很相似,无非就是超高的自由度,开放的引擎,官方支持的MOD,...…

胡言乱语集继续阅读
更早的文章

别了,耐萨里奥

耐萨里奥,艾泽拉斯最强大的生物之一,受到泰坦祝福的大地守护者,黑龙领袖。他一直是睿智、高贵、沉着和强大力量的象征。在燃烧军团第一次入侵时,他率领了五色巨龙军团协助暗夜精灵抗击恶魔。也正是那时,他提议五大龙族领袖将力量注入巨龙之魂中,以抵抗军团。而不幸的是,在无数恶魔的萦绕下,在无尽的战斗中,在古老邪神的诱惑下,他癫狂了——他的身体一块块裂开,赤红的火焰从身体的裂缝中喷涌出来,他调转龙头,赶走了其他四色巨龙领袖。正是从此刻开始,他有了一个新的名字,死亡之翼。11月30日凌晨3时,WOW美服开...…

胡言乱语集继续阅读