探究原因
基本上这种事情一定可以在Apple文档中找到,看NSLog的文档,第一句话就说:Logs an error message to the Apple System Log facility.,所以首先,NSLog就不是设计作为普通的debug log的,而是error log;其次,NSLog也并非是printf的简单封装,而是Apple System Log(后面简称ASL)的封装。
ASL
ASL是个啥?从官方手册上,或者从终端执行man 3 asl都可以看到说明:
These routines provide an interface to the Apple System Log facility. They are intended to be a replacement for the syslog(3) API, which will continue to be supported for backwards compatibility.
大概就是个系统级别的log工具吧,syslog的替代版,提供了一系列强大的log功能。不过一般我们接触不到,NSLog就对它提供了高层次的封装,如这篇文档所提到的:
You can use two interfaces in OS X to log messages: ASL and Syslog. You can also use a number of higher-level approaches such as NSLog. However, because most daemons are not linked against Foundation or the Application Kit, the low-level APIs are often more appropriate
一些底层相关的守护进程(deamons)不会link如Foundation等高层框架,所以asl用在这儿正合适;而对于应用层的用NSLog。
在CocoaLumberjack的文档中也说了NSLog效率低下的问题:
NSLog does 2 things:
- It writes log messages to the Apple System Logging (asl) facility. This allows log messages to show up in Console.app.
- It also checks to see if the application’s stderr stream is going to a terminal (such as when the application is being run via Xcode). If so it writes the log message to stderr (so that it shows up in the Xcode console).
To send a log message to the ASL facility, you basically open a client connection to the ASL daemon and send the message. BUT - each thread must use a separate client connection. So, to be thread safe, every time NSLog is called it opens a new asl client connection, sends the message, and then closes the connection.
意识大概是说,NSLog会向ASL写log,同时向Terminal写log,而且同时会出现在Console.app中(Mac自带软件,用NSLog打出的log在其中全部可见);不仅如此,每一次NSLog都会新建一个ASL client并向ASL守护进程发起连接,log之后再关闭连接。所以说,当这个过程出现N次时,消耗大量资源导致程序变慢也就不奇怪了。
时间和进程信息
主要原因已经找到,还有个值得注意的问题是NSLog每次会将当前的系统时间,进程和线程信息等作为前缀也打印出来,如:
2012-34-56 12:34:56.789 XXXXXXXX[36818:303] xxxxxx
当然这些也可能是作为ASL的参数创建的。

转载于:https://www.cnblogs.com/mumoozhu/p/4495260.html

Xcode中的NSLog详解相关推荐

  1. Objective-C中的@Property详解

    Objective-C中的@Property详解 @Property (属性) class vairs 这个属性有nonatomic, strong, weak, retain, copy等等 我把它 ...

  2. [置顶] iOS中 支付宝钱包详解/第三方支付

    [置顶] iOS中 支付宝钱包详解/第三方支付 韩俊强的博客 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 一.在app中成功完成支付宝支付的过程 1.申请支付 ...

  3. ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route

    前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...

  4. Asp.net中GridView使用详解(引)【转】

    Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...

  5. Linux中iptraf命令详解(IP局域网监控工具)

    2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03   作者:佚名    ...

  6. ArcGIS Engine中的Symbols详解

    转自原文 ArcGIS Engine中的Symbols详解 本文由本人翻译ESRI官方帮助文档.尊重劳动成果,转载请注明来源. Symbols ArcObjects用了三种类型的Symbol(符号样式 ...

  7. js路由在php上面使用,React中路由使用详解

    这次给大家带来React中路由使用详解,React中路由使用的注意事项有哪些,下面就是实战案例,一起来看一下. 路由 通过 URL 映射到对应的功能实现,React 的路由使用要先引入 react-r ...

  8. Linux中etc目录详解

    Linux中etc目录详解 /etc目录 包含很多文件.许多网络配置文件也在/etc 中. /etc/rc   or/etc/rc.d   or/etc/rc*.d   启动.或改变运行级时运行的sc ...

  9. java 自定义正则表达式_java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...

最新文章

  1. Spinner 使用的使用 报错:ArrayAdapter requires the resource ID to be a TextView
  2. 李飞飞等提出新的迭代视觉推理框架,在ADE上实现8.4 %的绝对提升
  3. java 支持 shards 的jar_Hibernate Shards 数据的水平、垂直切割(一)- Hibernate测试环境...
  4. 今天重新建立了个eclipse 的maven项目,提示org.junit找不到
  5. oracle12基本操作
  6. 史上最详细阿里云Docker下载运行Zookeeper!!!!
  7. 数组(ArrayList)底层怎样扩容
  8. html5简历阅读,HTML5 移动简历模板
  9. iOS 操作系统被曝无线网络命名bug 导致 iPhone无法连接无线网络
  10. UVa834 Continued Fractions【连分数】
  11. 春节前后,太原将举办多种展览演出
  12. 安卓上传文件时修改文件名称_使用mmv命令批量修改文件名称
  13. ae效果英文版翻译对照表_AE自带特效中英文对照表
  14. 代理软件使用拨号不可用,使用wifi正常使用 解决 win10
  15. WM_SIZING 使用说明
  16. python编程 个人所得税计算器
  17. 迅雷CEO邹胜龙自述:迅雷十年反思
  18. 奈奎斯特定理与香农定理
  19. 回炉重造七---磁盘存储和文件系统
  20. Jupyterlab安装和配置

热门文章

  1. c 应用程序mysql_MySQL C 语言应用程序接口开发教程
  2. ruby 新建对象_Ruby面向对象编程的简介
  3. javascript模块_JavaScript模块第2部分:模块捆绑
  4. redis主从复制、高可用和集群
  5. 白盒测试方法之条件覆盖测试
  6. PAT(甲级)2021年春季考试 7-3 Structure of Max-Heap
  7. 零基础全方位学习java的方法
  8. 【冷门实用小工具】轻量级流程图工具ClickCharts PRO绿色版,ClickCharts PRO下载【亲测有效】
  9. OCQ亮相中国移动办公峰会 荣获2017中国移动办公创新品牌
  10. 论文笔记之:Generative Adversarial Text to Image Synthesis