ios 预处理程序

预处理程序(宏定义)实际是在编译OC之前处理的语句,预处理程序以#标记,必须是该行的第一个非空格字符。

1、#define语句

#define语句的基本用途之一就是给符号名称指派程序常量。预处理程序语句

#define  TRUE  1
 定义了名称TRUE的值为1,
int  flag=TRUE;
#define语句经常放在程序的开始,#import或者#include语句之后,但是这不是必须得,他们可以出现在程序的任何地方都可以。但是在程序引用这个名称之前必须先定义他们。

#define的好处就是当你要用一个常量的值时,只要在#define的语句中定义,修改时只要在#define的语句中修改就可以了。

惯例:1、预定义的值基本都是大写的,这样做是为了区分变量名,对象名,类名还是预定义名;2、预定义之前都加字母k,这样预定义的值就不用全部大写了,比如:kMaximumValues。对常量值使用预定义名称有助于程序的可读性和扩展性:

#define MAXIMUM_DATA_VALUES  1000
预定义的程序是执行文本替换的,也就是说,直接替换预定义的语句,例如:

#define SQ(x)  x*x
使用SQ(x)时有一个陷阱,那就是如果你要加括号运算的话,必须在预定义的时候加:

y=SQ(v+1)
替换成了:

y=v+1*v+1
所以你可以预定义语句写成:
#define SQ(x)  ((x)*(x))
这样就可以替换成:

y=((v+1)*(v+1))
2、#import语句

如果你自己开发了一组宏,你可以将所有的宏收入到一个文件里面,然后使用#import语句导入到你要用到的那个文件里面去,#import与#include的区别就是#import不会重复导入同一个文件。

#import “”是导入源文件(从当前目录搜索),#import<>是导入系统库文件(不会从当前目录搜索)。

3、#ifdef、#endif、#else、#elif

有些代码对硬件或者系统有一定的依赖,如果在不同的硬件或者系统上,就必须运行另一套代码,那么怎么样实现在不同的硬件或者系统上运行不同的代码呢?要用到条件编译比如:如果前面已经定义了MAC_OS_X,下面的语句,

#define MAC_OS_X
#ifdef MAC_OS_X
#define SYSTERM @"os_x"
#else
#define SYSTERM @"ios"
#endif
或者可以debug:

#define _DEBUG
#ifdef _DEBUG
#define  Log  NSLog(@"HelloWorld!")<pre code_snippet_id="611186" snippet_file_name="blog_20150303_11_6920470" name="code" class="objc"><span style="font-family: Arial, Helvetica, sans-serif;">#define DNSLog(...) NSLog(__VA_ARGS__)</span>
#endif
 

预定义名称的三个点(...)代表可以传多个参数,对应的替换文本__VA_ARGS__

#define isIPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define SYSTEM_VERSION_GREATER_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

//G-C-D
#define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
#define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)

//color
#define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
#define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]

获取屏幕宽高:

#define WIDTH [[UIScreen mainScreen] bounds].size.width
#define HEIGHT [[UIScreen mainScreen] bounds].size.height


3、#undef语句

在一些情况下,可能需要使一些已经定义的名称变成未定义的,通过使用#undef语句就可以了:

#undef name


注:预定义会将所有以斜线(\)结尾的行连接成一行。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值