iOS开发中使用宏定义提高开发效率 以及配合Compiler Flags写出高质量的代码
2016-02-02 17:01
736 查看
iOS开发中,巧妙的使用宏定义,可以提高开发效率,本篇简单介绍一下宏的定义,设置,应用,并在未来实践中不断追加一些常用的宏定义。
iPhone应用程序开发调试的时候,在代码中加入NSLog的暴力调试方法是很频繁的,但是在release的时候要删除这些调试代码,那工作量是烦躁,这样的情况下,试用宏就会显得非常的方便。 看下面的例子:
像上面例子这些宏,ProjectName_Prefix.pch中追加之后,不用import就能直接在工程的文件中直接试用了。
默认情况下,在工程设置的Macros里已经有DEBUG的设置参数的,如果需要添加其他参数的话,就在Xcode的工程设定里设置相对应的参数:
1.打开工程设置
2.「TARGETS」下选择设置对应工程「Build Setting」
3.「XXX – Preprocessing」选项下的「Preprocessor Macros」项目的「DEBUG」中追加对应的参数
这样设置以后,调试log的代码段只会在debug的时候才有效。 另外使用方法的话,就是用定义的LOG方法去替代NSLog方法,想打出函数名的log就使用LOG_METHOD。
例:
大家可以根据项目的需要添加各种log处理的形式,这样就方便许多了。
除了DEBUG,有时候有很多的配置用宏的话,写代码也没有那么烦躁,比如说Google Analytics的设定
调试Log
iPhone应用程序开发调试的时候,在代码中加入NSLog的暴力调试方法是很频繁的,但是在release的时候要删除这些调试代码,那工作量是烦躁,这样的情况下,试用宏就会显得非常的方便。 看下面的例子:#ifdef DEBUG #define LOG(...) NSLog(__VA_ARGS__); #define LOG_METHOD NSLog(@"%s", __func__); #else #define LOG(...); #define LOG_METHOD; #endif |
默认情况下,在工程设置的Macros里已经有DEBUG的设置参数的,如果需要添加其他参数的话,就在Xcode的工程设定里设置相对应的参数:
1.打开工程设置
2.「TARGETS」下选择设置对应工程「Build Setting」
3.「XXX – Preprocessing」选项下的「Preprocessor Macros」项目的「DEBUG」中追加对应的参数
这样设置以后,调试log的代码段只会在debug的时候才有效。 另外使用方法的话,就是用定义的LOG方法去替代NSLog方法,想打出函数名的log就使用LOG_METHOD。
例:
LOG(@"Data:%@",str); LOG_METHOD |
#ifdef DEBUG #define DNSLogPoint(p) NSLog(@"%f,%f", p.x, p.y); #define DNSLogSize(p) NSLog(@"%f,%f", p.width, p.height); #define DNSLogRect(p) NSLog(@"%f,%f,%f,%f", p.origin.x, p.origin.y, p.size.width, p.size.height,); #else #define DNSLogPoint(p); #define DNSLogSize(p); #define DNSLogRect(p); |
其他应用
除了DEBUG,有时候有很多的配置用宏的话,写代码也没有那么烦躁,比如说Google Analytics的设定#define GA_TRACKPAGE(PAGE) { NSError *error; if (![[GANTracker sharedTracker]trackPageview:[NSString stringWithFormat:@"/%@", PAGE] withError:&error]) { LOG(@"%@",error.helpAnchor); } LOG(@"GA /%@", PAGE); }; #define GA_TRACKEVENT(EVENT,ACTION,LABEL,VALUE) { NSError *error; if (![[GANTracker sharedTracker] trackEvent:EVENT action:ACTION label:LABEL value:VALUE withError:&error]){ LOG(@"%@",error.helpAnchor); } LOG(@"GA %@/%@/%@", EVENT, ACTION, LABEL); }; #define GA_TRACK_CLASS GA_TRACKPAGE(NSStringFromClass([self class])); #define GA_TRACK_METHOD GA_TRACKEVENT(NSStringFromClass([self class]),NSStringFromSelector(_cmd), @””, -1); } |
多行表示的写法
#define ReloadBarButton [[[UIBarButtonItem alloc]initWithImage:ReloadBarButtonIcon style:UIBarButtonItemStylePlain target:selfaction:@selector(ContentsReload:)] autorelease] 参照C语言的预处理命令简介 : #define 定义一个预处理宏 #undef 取消宏的定义 #include 包含文件命令 #include_next 与#include相似, 但它有着特殊的用途 #if 编译预处理中的条件命令, 相当于C语法中的if语句 #ifdef 判断某个宏是否被定义, 若已定义, 执行随后的语句 #ifndef 与#ifdef相反, 判断某个宏是否未被定义 #elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if #else 与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else #endif #if, #ifdef, #ifndef这些条件命令的结束标志. defined 与#if, #elif配合使用, 判断某个宏是否被定义 #line 标志该语句所在的行号 # 将宏参数替代为以参数值为内容的字符窜常量 ## 将两个相邻的标记(token)连接为一个单独的标记 #pragma 说明编译器信息#warning 显示编译警告信息 #error 显示编译错误信息 #define SAFE_RELEASE(obj) if(obj){[obj release];obj=nil;} 释放 参考文档: http://blog.csdn.net/wangqiuyun/article/details/8104698 http://blog.csdn.net/a351945755/article/details/8433909
|
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- iOS开发之路--微博“更多”页面
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法