自定义 NSLog以便发版和调试

问题

  • 开发中用了大量的 NSLog,但是发布时想取消这些 NSLog
  • 开发中是否经常用过 NSLog(@"%s", __FUNCTION__);

解决问题

  • 新建 ExtendNSLog 类,继承自 NSObject
  • 在 ExtendNSLog.h 中删除默认代码
  • 添加以下函数声明:
void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...);
  • 在 ExtendNSLog.m 中删除默认代码
  • 添加以下代码实现:
 1 void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...) {
 2
 3     va_list ap;
 4
 5     va_start(ap, format);
 6
 7     if (![format hasSuffix: @"\n"]) {
 8         format = [format stringByAppendingString: @"\n"];
 9     }
10
11     NSString *body = [[NSString alloc] initWithFormat:format arguments:ap];
12
13     va_end(ap);
14
15     NSString *fileName = [[NSString stringWithUTF8String:file] lastPathComponent];
16     fprintf(stderr, "(%s) (%s:%d) %s",
17             functionName,
18             [fileName UTF8String],
19             lineNumber,
20             [body UTF8String]);
21 }
  • 新建 PrefixHeader.pch 文件
  • 输入以下内容:
 1 #ifdef __OBJC__
 2
 3 #import <UIKit/UIKit.h>
 4 #import <Foundation/Foundation.h>
 5
 6 #import "ExtendNSLog.h"
 7
 8 #ifdef DEBUG
 9 #define NSLog(args...) ExtendNSLog(__FILE__, __LINE__, __PRETTY_FUNCTION__, args);
10 #else
11 #define NSLog(x...)
12 #endif
13
14 #endif
  • 选择 项目->TARGETS->[ProjectName]->Build Settings
  • 在搜索框输入 prefix header
  • 在 Prefix Header中输入 [ProjectName]/PrefixHeader.pch

如下图所示

  • 运行测试,如下图修改运行模式

时间: 2024-08-13 11:45:14

自定义 NSLog以便发版和调试的相关文章

iOS笔记:Objective-C自定义NSLog宏

/*  XCode LLVM XXX - Preprocessing中Debug会添加 DEBUG=1 标志  */ #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORM

易助工资总额管控发版说明

一.开发背景 易助工资总额管控系统-2016已经正式发版.上市,满足人事薪酬管理的基础应用,基于平台开发,这意味着软件界面信息.数据结构.功能模块及数据处理算法均可随意修改,用户可根据自身实际情况自行组装.修改模块,甚至可开发新的应用系统.是目前市场上少见的一款务实.经济.高效.灵活的企业管理系统. 二.应用特征 1.功能完备,适用性强 提供系统维护.组织管理.人事管理.合同管理.薪资管理.报表管理.政策法规.保险福利.绩效管理.考勤管理.自助管理功能模块,提供报表与图形分析功能,方便用户使用与

AEAI WX 微信扩展框架 V1.0 版本发版说明

AEAI WX 微信扩展框架是基于 Java 封装的微信公众号二次开发框架,基于该框架可以快速接入微信,实现自定义菜单创建.信息按规则自动回复.集成企业的线上系 统(HR.CRM.微店.网站等).同时可以整合集成互联网开放资源(如:百度地图.天气预报.热映电影等). 本次发版的AEAI WX 微信扩展框架为v1.0版本,该产品现已开源并上传至开源中国,产品下载地址:http://pan.baidu.com/s/1ntsXKCT,欢迎大家下载使用,也可以加入数通畅联产品QQ技术群 29971983

iOS实时发版,动态库方式 不上App Store可以使用啊

iOS如果想要实现实时发版,据我了解现在基本上用的是两种方式 1:使用Lua脚本进行,基本上很多手游都是这样做的,再配合上Cocos2d-x这个框架使用起来也比较简单. 2:使用动态库  这里我说的就是这中方式. 先说下实现思路,在动态库中实现一个入口类,和入口方法,这个方法在主工程中调用 这里说下创建动态库的步骤: 下面直接上代码啦. 动态库中测试界面 VCOne.h #import <UIKit/UIKit.h> @interface VCOne :UIViewController @pr

在项目中自定义NSLog

1.为什幺自定义NSLog? 因为NSLog在程序运行时是非常耗费内存和资源的.如果在程序运行或发布时让NSLog自动失效会极大提高运行效率 2.定义NSLog的方法 在pch文件中做判断程序处于运行阶段还是发布阶段 3.代码示例 #ifdef DEBUG // 处于开发阶段 #define HWLog(...) NSLog(__VA_ARGS__) #else // 处于发布阶段 #define HWLog(...) #endif 4.图片示例

AEAI ESB应用集成平台v3.5.3发版说明

发版说明 应用集成平台主要作为企业信息系统的"龙骨"来集成各业务系统,实现应用和数据的互联互通,一般称之为企业服务总线(Enterprise Service BUS,ESB).在数通畅联产品家族中应用集成平台命名为AEAI ESB. 本次发版的AEAI ESB_v3.5.3_20150615是数通畅联首次正式对外发布的AEAI ESB社区版(32位,限本机访问),该产品现已上传至网盘http://pan.baidu.com/s/1o6NvxXo,具体内容如下. 升级内容 新特性 1.

Database(Mysql)发版控制二

author:skate time:2014/08/18 Database(Mysql)发版控制 The Liquibase Tool related Database 一.Installation & Configration 二.Advanced Usage of the Liquibase 三.Frequently Questions 二.Advanced Usage of the Liquibase 1.实际场景模拟 实际需求:需要把不同环境的不同分支的数据库变更合并,并按需求应用或回滚

FineUI小技巧(6)自定义页面回发

前言 FineUI中的绝大部分回发事件都是由控件触发了,比如按钮的点击事件,下拉列表的改变事件,表格的排序分页事件.但有时我们可能会要自己触发页面回发,这时就要知道怎么使用 JavaScript 来做了,当然这个过程还是 FineUI 所默认支持的AJAX. 手工调用__doPostBack函数 相信每一位使用ASP.NET WebForms的同学都知道这个著名的函数,因为几乎每个页面的源代码中都能看到他的身影: 1 <script type="text/javascript"&

AEAI DP开发平台v3.3.0_20150228发版说明

产品说明 AEAI DP应用开发平台专门用于开发MIS类的Java Web应用,也称Miscdp(Misc Develope Platform)综合应用开发平台. 本次发版产品AEAI DP开发平台v3.3.0_20150228是2014年发版的开发平台v3.2.0_20141016的升级版本,该产品现已开源并上传至开源社区http://www.oschina.net/p/aeaidp,大家可以下载介质免费使用.详细内容可登入官网www.agileai.com了解,也可以加入我们的技术交流群29