引入

每当iOS开发被,日志系统是甚要紧的一个有的,尤其是以修补代码中的bug,通常会用NSLog来用这些信息打印至XCode控制台中显得,但当日记信息比多之早晚,会现出一些性及的问题。因为NSLog在使的下占用资源比较多,其设计吧是根据ASL(Apple
System Log)的高层封装,针对error
log。所以于针对性能要求于高之地方,不能够因此NSLog进行调节。

作NSLog的代表,CocoaLumberjack是同一缓慢可以的老三着日志系统。官方的介绍如下:

CocoaLumberjack is a fast & simple, yet powerful & flexible logging framework for Mac and iOS.

It is similar in concept to other popular logging frameworks such as log4j, yet is designed specifically
for Objective-C, and takes advantage of features such as multi-threading, grand central dispatch (if available),
lockless atomic operations, and the dynamic nature of the Objective-C runtime.

支撑用CocoaPods和Carthage部署到项目蒙,当前的系要求如下:

于规划被,CocoaLumberjack使用了汪洋底GCD语法,使性能更好;宏定义的利用,让API接口语法更加方便;加上整体架构的设计独特,使这套第三在日志系统又便宜根据部分非正规需求来定制功能。

自从90年代从,我们都能感受及少独极的光景:

代码分析

应用CocoaLumberjack的早晚,会引用其头文件,Oc的类型援CocoaLumberjack.h,swift项目CocoaLumberjack.swift。

这里,我们从CocoaLumberjack.h展开,文件开始为有了大段的笺注信息,详细介绍了关于该日志系统的采取(在拖欠源码的外头文件中,同样好看来消息的注释信息,对拖欠接口甚至接近的设计进行诠释,可见一效仿好的开源项目于细节及是开的多细致,值得学习!),随后,引入了一样多级之腔文件:

  1. DDLog举凡拖欠日志系统被着力之有的,接口调用都经此类进行调用,在此类中查封装了重重的协议及根基类,也好不容易作为整个日志系统的履中枢,给整架构打下基础。

  2. DDLogMacros.hDDAssertMacros.h当时点儿独文件被定义了大气之高大,都是对DDLog的接口进行的包装,封装后,对DDLog的利用变得更简明。

  3. DDASLLogCapture是用来捕获ASL消息之工具类。

  4. DDTTYLoggerDDASLLoggerDDFileLoggerDDOSLogger凡供切实日志功能的近乎,分别对诺着控制台日志功能、ASL日志功能、文件日志功能与oslog日志功能。如果欲多新的日志功能,可以效仿就几只类似,实现新力量。

成千上万合作社瞬间如起,成为“独角兽”,

DDLog类

大凡单例,其中间维持了一个dispatch_queue_tdispatch_group_t和信号锁dispatch_semaphore_t(最可怜啊1000独线程同时做客),通过就仿佛GCD属性可以老好地发表出多线程的优势。此外在此类中尚维持在一个loggers数组,数组里面的每个元素呢DDLoggerNode色的素。DDLogDDLoggerNode来保存于添加的logger(同前介绍的logger),并将添加logger时底level跟logger中保持的线程也一并添加到DDLoggerNode里。这样当DDLog要log一修message的时光,就会见失去遍历这个数组,然后因level以相应的dispatch_queue_t中执行。

DDLog蒙,定义了创建logger需要之一部分接口及根基类,DDLoggerDDLogFormatter是零星个商量,DDLogger举凡创造的logger必须依的合计,内部的定义如下:

- (void)logMessage:(DDLogMessage *)logMessage NS_SWIFT_NAME(log(message:));

@property (nonatomic, strong) id <DDLogFormatter> logFormatter;

@optional

- (void)didAddLogger;

- (void)didAddLoggerInQueue:(dispatch_queue_t)queue;

- (void)willRemoveLogger;

- (void)flush;

@property (nonatomic, DISPATCH_QUEUE_REFERENCE_TYPE, readonly) dispatch_queue_t loggerQueue;

@property (nonatomic, readonly) NSString *loggerName;

其中logMessage大凡因此来被调用执行log的接口,在DDLog遭受让调用;logFormatter凡一个遵循DDLogFormatter商讨的类,主要为此来控制log的格式(控制高出口或者存入文件);接下去的did和will开头的接口也事件响应,可以挑选去落实以对应事件发生时的拍卖;flush举凡在有些涉嫌内存和io操作需要实现的好像,它可操纵以内存不足的下以buffer存入磁盘或者有关的数据库;最后loggerQueueloggerName用来得到在logger中维系的线程队列,loggerName大凡故来创造行用的名,在DDAbstractLogger遭得以看到logger线程队列是安保障的。

以创造logger的时段,只待继续给DDAbstractLogger,其里面会保持一个CDG队列,然后以DDLogger商,接口都于议中定义好了。在logger里面只待留意于功能的实现,这样可以节约很多接口定义和性维持方面的从业。

同样在DDLog中间会并发多类 id<DDLogger>
的特性,通过协议,即使不了解该实际贯彻,也堪调用接口。通过DDAbstractLogger基类和DDLogger谋,为进行做了颇好的根基。

CocoaLumberjack的架构关系要下图:

广大企业瞬间倒塌,销声匿迹。

相对而言试验

苹果官方在2016年的WWDC上放有了新的日志系统(The unified logging
system),提供了日记信息分类统计以及关键信息捕捉等功用,而且每当快高达会见还快、使用重复便民、提供被开发者的可控性也还多。

说到底对命令执行输出效率展开实验,这里针对NSLogprintfos_logwritev于命令行的出口性能进行了对待:

    CFAbsoluteTime startNSLog = CFAbsoluteTimeGetCurrent();
    for (int i = 0; i < 10000; i++) {
        NSLog(@"%d", i);
    }
    CFAbsoluteTime endNSLog = CFAbsoluteTimeGetCurrent();

    CFAbsoluteTime startPrintf = CFAbsoluteTimeGetCurrent();
    for (int i = 0; i < 10000; i++) {
        printf("%d\n", i);
    }
    CFAbsoluteTime endPrintf = CFAbsoluteTimeGetCurrent();

    CFAbsoluteTime startOsLog = CFAbsoluteTimeGetCurrent();
    for (int i = 0; i < 10000; i++) {
        os_log(OS_LOG_DEFAULT, "%d\n", i);
    }
    CFAbsoluteTime endOsLog = CFAbsoluteTimeGetCurrent();

    CFAbsoluteTime startWritev = CFAbsoluteTimeGetCurrent();
    for (int i = 0; i < 10000; i++) {
        struct iovec v[1];
        v[0].iov_base = "a\n";
        v[0].iov_len = 2;
        writev(STDERR_FILENO, v, 1);
    }
    CFAbsoluteTime endWritev = CFAbsoluteTimeGetCurrent();

    NSLog(@"NSLog time: %lf, printf time: %lf", endNSLog - startNSLog, endPrintf - startPrintf);
    NSLog(@"OsLog time: %lf, writev time: %lf", endOsLog - startOsLog, endWritev - startWritev);

Mac电脑上的运转时刻:

虚拟机运行时:

真机运行时刻:

经比能够,采用writev和printf这种底层的命令执行输出效率最高。

如此这般好之情况引发了大家之关爱。

总结:

  1. CocoaLumberjack架构设计精妙,接口易于拓展定制功能。
  2. 苹果提供了初的日记系统API,但以命令行的出口及底层接口的频率又胜似。

参考:
NSLog效率低下的因由及品尝lldb断点打印Log
WWDC2016
session721
Logging

以在放大镜看这些高速“长大”的企业还是行业,无不具有颠覆性的商业模式。

意思就是是:他们及原先的商号“长法”都未均等。

因为逻辑思考不雷同,顶层规划虽无一样,最终结出就是很不等同。

不少底商业模式堪称惊艳。

倘若惊艳的商业模式不仅惊艳,它们要财富的联合收割机。

其坐尽少之投入、最抢之年月,实现了最好可怜之纯收入,“举重若轻”,很有范儿。

案例一网络游戏如何成为吸金黑洞的?

网络游戏的发展史,就是一个商业模式创新而起巨大价值的历史。

1969年至1977年终于第一替代网络游戏阶段,因为平台、操作系统和语言各不相同,当时的处理器硬件与软件为任统一之技术标准,因此她基本上为技术宅男的试验品,运行于麻省理工、弗吉尼亚相当于大学的主机及。它们更如是秀智商的产物,充满着自娱自乐的气。

首先代表网络游戏的商业模式:

理所当然,是免费的

1978年及1984年进来网络游戏的次阶段,嗅觉灵敏的嬉戏开发商跟发行商开始涉足网络游戏,推出了第一批判有着推广意义之网络游戏。

游戏产出了“可持续性”的定义,玩家所饰的角色好成年累月地在同等世界内不断进化,而非像过去之玩那样就是单过客。游戏还可超过系统运转,能连抱当时之其它一样磨蹭打。至此,网络游戏开始进入收费时。

森买主都愿付出高昂的开销来玩游戏。从《凯斯迈之岛》的诸时12美元到GEnie的各国小时6美元,1990年AUSI公司也《龙门》(Dragon’sGate)定的价位也各个时20美元,尽管费率高得惊人,但准有人愿意每月花上2000差不多美元去玩这款游戏。

人类从此就香烟、酒精下又大多矣千篇一律种上瘾且不极端明了减寿的事物(此处先暂时还放下道德评判)。

仲代网络游戏的商业模式:

主流计费方式是按玩家在线的小时计费,后来拉开为点卡(时间确保)。运营商销售游戏充值卡,玩家充的钱更多,玩的时日虽越长。

1985年到1995年,网络游戏进入第三号,Quantum Computer
Services毫无声息地生产了QuantumLink平台,这一个占为游戏机玩家服务的图纸网络平台,费率仅为每月9.95美元。这同一生意模式是网络游戏发展史上之一个关键里程碑。

包月的模式变成主流计费方式,瞬间加大了玩家数量,也拿网络游戏带入了万众市场。运营商与游戏商在网络游戏身上且十分赚了同等笔画。

《夜以绝冬城》(Neverwinter
Nights)从降生到下线,运营了多少年,尽管所下的图像技术陈旧不堪,但唯有以其生命周期的尾声一年,即1996年,它就为AOL带来了500万美元之入账。

一个局面宏大、分工明确的家业生态条件最终形成。

“大型网络游戏”(MMOG)的定义发出水面,因一直通互联网,所以世界限量外形成了一个颇一净的市场。

包月制被周边接受,采用包月制后,游戏运营商的关键经营目标就不再是身处如何被玩家当游戏里付出再多之年华达,而是放在了哪些保障并扩张游戏的用户群上,相继而形成了季度卡和年卡等付费办法。

其三替网络游戏的商业模式:

包月收费或季卡、年卡。

2003年,网络游戏进入到了季单级次。中国之网络游戏在这个时也蓬勃发展起来,胡润《中国腹地百富榜》和福布斯《中国内地年度富豪榜》排名前10号的有钱人4各类染指网络游戏。

2006年,著名“小高”史玉柱的大个儿公司出的《征途》是同一差颠覆式商业模式创新。

娱乐时间免费,游戏道具、武器得往营运商购买,谁花钱多谁就见面要命厉害。给玩家发“工资”,让从未钱的人数陪伴有钱之人玩(虚拟世界一样的发出阶级呀)。

“无区界”自由跨服的“技术创新”、“大百科全书”的玩法创新,都使《征途》注册用户以及同时在线人数并飚升,成为世界第三慢性同时在线超百万底网络游戏。

则发出大气之免费玩家在,但人均收入比传统方式大起了七倍.

2009年,巨人公司之《绿色征途》再次自我迭代,推出游戏时免费,虚拟道具免费,但玩乐玩家之间买卖道具时需向运营商交“税”——摊位费、交易税、增值税、所得税等,俨然一个虚拟王国的政府,直接打开收税模式……

截至今天,众多的网络游戏万变的商业模式设定中还还依稀见得巨人公司当年的痕。

史玉柱为借助巨人公司之这有限慢性产品成功登网络游戏的抢钱大军,从娱乐企业树立及美国纽交所挂牌只所以了3年之年华,因为他选了一个速升高的正业(俗称:风口),并且计划了抢眼的商业模式,同时落实而连的用心浇灌。

小结一下:网络游戏的商业模式创新路径

这些是起家于针对玩家需要的充分洞察基础之上而演变出来的。

上述图片均源于电影【魔兽】

案例二万万没有悟出的成都秀美东边

堪称中小型城郊景区商业模式的奇葩

水灵灵东方是身处成都三围绕路边的一个公园。

官说法是:一所行的综合性生态知识景区。

存在的流弊是主题不明显、休闲和游玩业态少要不管特色,位于高架桥生;优势是:离城市近,地处三圣花乡旁。

门票50初次,票房大不同,所得收益并运营成本还难以为继;园内餐饮通过近3年之折磨,总算是有点微盈利。陆续召开的几差大型主题活动,费效比跟转化率都怪没有。

唯独,貌似业主方并无急。

原业主的主业是园林设计及工程,这个公园于外的事务系统受到既做了苗圃(花木种植)的生产培训成效,又是自园林设计水平的样板工程,加之项目地块在高架桥生,所以当场所得用地资产不过低。

也就是说,别人没有想着此公园赚钱。同时,这几乎年陆续种植的各种珍奇树种已经升值多加倍。

所以,Mr.亮想表达的是,只学表面的种类选型,产品设计、营销和治本那都止是“瞎子摸象”。

古语“透过现象看本质”的确经典。

来明白对标项目还是竞争对手的商业模式才会让咱们好的类成功胜算更甚一些。特别是商业模式的创新及迭代,这才是一个起“红海”到“蓝海”的要害。

美国,号称“创业者的乐园”,据统计,美国公司创新成功的出60%都是商业模式的换代。

我们耳熟能详的Uber、亚马逊同苹果还一概是颠覆了事先的人情商业模式而赢得了惊天动地的中标。

今,在非常巡游时之过来,我们重当大大方方借鉴其它行当之成功商业模式,升级我们的盘算,精巧的计划来专属于我们温馨种之商业模式,让成功不再侥幸。