1、判断当前设备是不是iOS7以上版本

#define IOS_VERSION_7_OR_ABOVE (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)? (YES):(NO))

如果判断系统的设备在项目中使用频繁,那么就将这个宏在.pch文件中定义,这样就可以在整个项目中使用这个宏。

使用的时候最好是用if-else

if(IOS_VERSION_7_OR_LATER)

{

NSLog(@"iOS7 or Later");

}

else

{

NSLog(@"Version before iOS7");

}

如果使用#if-#else-#endif,此时是会报错的,

#if IOS_VERSION_7_OR_LATER

//这是iOS7或更高版本

#else

//这是iOS7之前的版本

#endif

为什么会有错误呢,因为iOS项目在判断系统版本的宏IOS_VERSION_7_OR_ABOVE的语法是动态的,也就是在运行时判断的,这回根据你运行真机的不同系统得出不同的值;而#if-#else-#endif判断语句中是静态编译的,就是里面的语句在Xcode编译的时候就要确定无误的,而现在的判断条件IOS_VERSION_7_OR_ABOVE是运行时候才能知道的确切数值,运行时是在编译的后面的过程,这时候就产生了矛盾,Xcode报错。打个比方来说,你想买个100块钱的篮球,if-else就是可以支持信用卡消费,你现在没钱,可以先买了,等到你赚了钱再还,赚了钱这个时刻类比就是运行时判断了系统的版本;而#if-#else-#endif只支持现金消费,它只要求你现在有钱,如果现在没钱,对不起,这个篮球不卖。

2、typedef和#define的区别

(1)typedef是类型定义,它是语言编译过程中的一部分,我们在iOS开发过程中经常将typedef和枚举enum一起使用,比如下面的代码,

typedef enum _OperateType{

InsertOperateType = 0,

UpdateOperateType,

DeleteOperateType,

}OperateType;

这时候OperateType就是一个数据类型,该类型的变量只能是InsertOperateType、UpdateOperateType和DeleteOperateType三种数值。

(2)#define本质上就是文本替换,它本身并不在编译过程中执行,而是在之前(预处理过程)就已经完成了。

两者的区别:

宏定义只是简单的字符串替换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装新,所以新命名的标识符具有定义变量的功能,看下面的代码以及讲解,

typedef (int *) pINT1;

#define pINT2 int*;

使用pINT1、pINT2来定义变量

pINT1 a,b;--等价于-- int *a;int *b;表示定义了两个指向整型变量的指针a和b

pINT2 a,b;--等价于-- int  *a,b;表示定义了一个指针变量a,一个整型变量b

最新文章

  1. 国内最全最详细的hadoop2.2.0集群的MapReduce的最简单配置
  2. 私有Pods封装个推SDK功能(解决方案)
  3. WPF制作的小型笔记本-仿有道云笔记
  4. ReportDB数据库存储选型分析
  5. 关于 MAXScript 获取全部文件
  6. MM 不哭 (tyvj 1097)
  7. 使用工厂bean和Utility Schema定义集合
  8. word2007中如何隐藏工具栏
  9. css部分基础归纳--学习笔记
  10. 通过分析 JDK 源代码研究 Hash 存储机制--转载
  11. poj 1459 (最大流)
  12. 安装WindowsXP操作系统(Ghost版) - 初学者系列 - 学习者系列文章
  13. 【转载】如何让Chrome浏览器允许本地环境支持Ajax
  14. HashMap如何工作 - Java
  15. 进程管理之wait和waitpid
  16. springboot开启access_log日志输出
  17. [bzoj1594] [Usaco2008 Jan]猜数游戏
  18. PMM Client 安装异常报错
  19. Android 开发 重写定位器类Timer与TimerTask
  20. Angular4 HTTP通讯

热门文章

  1. 【网络流】【待补】C. Heidi and Library (hard)
  2. struts2 标签库使用
  3. ES6__变量的解构赋值
  4. hdu 4046 Panda [线段树]
  5. springboot整合mybatis,freemarker
  6. HashCode和equal方法
  7. Eclipse Explorer插件快速打开项目文件在系统资源管理器
  8. Java生成验证码并进行验证(转)
  9. ElasticSearch(5.5.2)在java中的使用
  10. 运行mapreduce - java.lang.InterruptedException