iOS开发,#define的使用
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
iOS开发,#define的使用的更多相关文章
- iOS开发系列--打造自己的“美图秀秀”
--绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
--系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
- iOS开发系列--地图与定位
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
- iOS开发系列--网络开发
概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- iOS开发系列--无限循环的图片浏览器
--UIKit之UIScrollView 概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件 ...
- IOS开发基础知识--碎片50
1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...
随机推荐
- [转]Fedora 添加国内源(sohu, 163)
第一种方案 在国内163和搜狐提供很好的源,现在我们把它们俩添加到我们的源库.1. 添加搜狐的源 进入网站http://mirrors.sohu.com/,在左边找到fedora目录,点击该行右边的h ...
- HH的项链(codevs 2307)
题目描述 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此,他的 ...
- hdu 4043 FXTZ II [ 概率 + Java大数]
传送门 FXTZ II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- xhprof安装&&使用[转载]
编译安装 wget http://pecl.php.net/get/xhprof-0.9.2.tgz tar zxf xhprof-0.9.2.tgz cd xhprof-0.9.2/extensio ...
- final finally finalize 区别及用法
final 1,final修饰的class,代表不可以继承扩展. 2.final的方法也是不可以重写的. 3.final修饰的变量是不可以修改的.这里所谓的不可修改对于基本类型来来,的确是不可以修改. ...
- javascript实现 京东淘宝等商城的商品图片大图预览功能(图片放大器)
在京东和淘宝等购买东西的时候,我们会经常预览左侧商品展示图片,把鼠标放到原图,右侧就会有个大图显示出细节.本文将带领大家写一个这样简单的功能! 一.实现原理 当鼠标移入某一图片内部时,图片上部会出 ...
- Excel小tips - 设置指定可选填充内容
数据——数据验证——设置——允许(A)——序列——来源 图1 数据验证界面 图2 选取序列数据字典 图3 效果展示 可以在同一个工作薄的同一个或者另一个工作表中设置指定内容(充当数据字典),然后点 ...
- dhcp 过程
The Question SuperUser reader Sagnik Sarkar wants to know what the difference between 127.0.0.1 and ...
- POJ 1436 Horizontally Visible Segments(线段树)
POJ 1436 Horizontally Visible Segments 题目链接 线段树处理染色问题,把线段排序.从左往右扫描处理出每一个线段能看到的右边的线段,然后利用bitset维护枚举两个 ...
- jsoncpp的api简要说明
1 jsoncpp的api简要说明 1,解析(json字符串转为对象) std::string strDataJson; Json::Reader JReader; Json::Value JObj ...