iOS开发中使用宏定义提高开发效率
2015-02-26 14:59
253 查看
iOS开发中,巧妙的使用宏定义,可以提高开发效率,本篇简单介绍一下宏的定义,设置,应用,并在未来实践中不断追加一些常用的宏定义。
像上面例子这些宏,ProjectName_Prefix.pch中追加之后,不用import就能直接在工程的文件中直接试用了。默认情况下,在工程设置的Macros里已经有DEBUG的设置参数的,如果需要添加其他参数的话,就在Xcode的工程设定里设置相对应的参数:1.打开工程设置2.「TARGETS」下选择设置对应工程「BuildSetting」3.「XXX–Preprocessing」选项下的「PreprocessorMacros」项目的「DEBUG」中追加对应的参数这样设置以后,调试log的代码段只会在debug的时候才有效。另外使用方法的话,就是用定义的LOG方法去替代NSLog方法,想打出函数名的log就使用LOG_METHOD。例:
大家可以根据项目的需要添加各种log处理的形式,这样就方便许多了。
调试Log
iPhone应用程序开发调试的时候,在代码中加入NSLog的暴力调试方法是很频繁的,但是在release的时候要删除这些调试代码,那工作量是烦躁,这样的情况下,试用宏就会显得非常的方便。看下面的例子:#ifdefDEBUG #defineLOG(...)NSLog(__VA_ARGS__); #defineLOG_METHODNSLog(@"%s",__func__); #else #defineLOG(...); #defineLOG_METHOD; #endif |
LOG(@"Data:%@",str); LOG_METHOD |
#ifdefDEBUG #defineDNSLogPoint(p)NSLog(@"%f,%f",p.x,p.y); #defineDNSLogSize(p)NSLog(@"%f,%f",p.width,p.height); #defineDNSLogRect(p)NSLog(@"%f,%f,%f,%f",p.origin.x,p.origin.y,p.size.width,p.size.height,); #else #defineDNSLogPoint(p); #defineDNSLogSize(p); #defineDNSLogRect(p); |
其他应用
除了DEBUG,有时候有很多的配置用宏的话,写代码也没有那么烦躁,比如说GoogleAnalytics的设定#defineGA_TRACKPAGE(PAGE){NSError*error;if(![[GANTrackersharedTracker]trackPageview:[NSStringstringWithFormat:@"/%@",PAGE]withError:&error]){LOG(@"%@",error.helpAnchor);}LOG(@"GA/%@",PAGE);}; #defineGA_TRACKEVENT(EVENT,ACTION,LABEL,VALUE){NSError*error;if(![[GANTrackersharedTracker]trackEvent:EVENTaction:ACTIONlabel:LABELvalue:VALUEwithError:&error]){LOG(@"%@",error.helpAnchor);}LOG(@"GA%@/%@/%@",EVENT,ACTION,LABEL);}; #defineGA_TRACK_CLASSGA_TRACKPAGE(NSStringFromClass([selfclass])); #defineGA_TRACK_METHODGA_TRACKEVENT(NSStringFromClass([selfclass]),NSStringFromSelector(_cmd),@””,-1);} |
多行表示的写法
#define ReloadBarButton[[[UIBarButtonItemalloc]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显示编译错误信息#defineSAFE_RELEASE(obj)if(obj){[objrelease];obj=nil;}释放参考文档: |
相关文章推荐
- ios之开发中使用频率很高的宏定义-提高设备屏幕适配以及开发效率
- iOS开发中使用宏定义提高开发效率
- iOS开发中使用宏定义提高开发效率
- iOS开发中使用宏定义提高开发效率
- iOS开发中使用宏定义提高开发效率 以及配合Compiler Flags写出高质量的代码
- iOS开发中使用宏定义提高开发效率
- iOS开发提高效率之:使用CocoaPods管理依赖库
- iOS开发-学会使用代码块,提高你的开发效率
- iOS开发 -- 使用facebook的chisel来提高调试效率
- 使用VS2005搭建典型高效的SharePoint开发环境,提高生产效率,包含远程调试,自动部署
- NetBeans 使用的一些小技巧提高开发效率
- 提高你开发效率的十五个Visual Studio 2010使用技巧
- 我常用的几个提高iOS开发效率的开源类库及工具
- 提高你开发效率的十五个Visual Studio 2010使用技巧
- iphone开发常用开源库1----常用的几个提高iOS开发效率的开源类库及工具
- 提高你开发效率的十五个Visual Studio 2010使用技巧
- 使用VS2005搭建典型高效的SharePoint开发环境,提高生产效率,包含远程调试,自动部署
- 几个提高iOS开发效率的开源类库及工具
- 使用Workbench提高开发效率
- 几个提高 iOS 开发效率的开源类库及工具