qi前言:写一个宏来选择性地编译与运行为不同iOS所写的代码来支持多个版本的ios工程

#if __IPHONE_OS_VERSION_MIN_REQUIRED

    #import "xxxxxxxx ios7以下版本"

#else

    #import "xxxxxxxx 比如ios7以上版本"

#endif

官网文档介绍:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
/* make sure a default max version is set */
#ifndef __IPHONE_OS_VERSION_MAX_ALLOWED
#define __IPHONE_OS_VERSION_MAX_ALLOWED __IPHONE_7_0
#endif
/...........................
#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090)

#具体内容

#endif

如果我们打算加入一些高于某个特定版本的OS版本上的东西,我们不需要前面提到的条件编译(因为在后面版本的编译时我们需要这些代码)。在这个情况下,只有runtime检查是需要的。你既可以直接做该检查,也可以与其他宏保持整齐如下所示:

#define IF_PRE_IOS4(...) \
if (kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iPhoneOS_4_0) \
{ \
__VA_ARGS__ \
}

这里有三点需要指出:

  1. 我使用kCFCoreFoundationVersionNumber在runtime时决定iPhone OS的版本。网上也有许多其他的例子比如使用[[UIDevice currentDevice] systemVersion],但是这个方法需要进行字符串的比较而且可能需要处理字符串中的最大和最小数字。相比而言,一个double型的比较更加直接。
  2. 我没有使用惯用的do{x}while(0)结构在这个宏中,因此如果你需要的话你可以添加一个else在该宏的末尾(而且它不需要条件编译)。
  3. 我为这个宏设计了可变的参量列表,因此你可以添加任意数量的参量而不会有问题。

ios 系统参数用法的更多相关文章

  1. IOS NSInvocation用法简介

    IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...

  2. IOS UIButton用法详解

    这段代码动态的创建了一个UIButton,并且把相关常用的属性都列举了.希望对大家有用.   //这里创建一个圆角矩形的按钮UIButton *button1 = [UIButton buttonWi ...

  3. iOS - NSError用法规范

    iphone跬步之--错误信息 NSError   一.获取系统的错误信息 比如移动文件时,获取文件操作错误: NSError *e = nil;[[NSFileManager defaultMana ...

  4. iOS Block 用法 (1)-once again

    Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是“^”,接着 ...

  5. IOS UIWebView用法

    转自猫猫小屋 IOS webview控件使用简介(一) IOS webview控件使用简介(二)–加载本地html

  6. iOS TextField用法大全

    //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...

  7. iOS uuchart 用法

    这个是 画 折线图用的 一个 第三方文件 说白了就是一个  用 贝塞尔 曲线封装好的一个  第三方. 但是有机会还是需要看下怎么用

  8. iOS __block用法

    没有__block qualifier的primitive c types会直接在创建block的时候被capture到block里.有__block qualifier的话,会在调用block的时候 ...

  9. IOS NSString 用法详解

    [cpp]  view plain copy   //NSString 操作均不改变自身值 //构建字符串 NSString *szTmp = @"A string";       ...

随机推荐

  1. [Raobin] Ext.net在页面中以窗体的形式打开另外的页面

    public ActionResult NewPartWindow(string id, string copy, string code) { var vm = new VM(this); var ...

  2. HTTP 304 Response

    当一个客户端(通常是浏览器)向web服务器发送一个请求,如果web服务器返回304响应,则表示此请求的本地缓存是最新的,可以直接使用.这种方法可以节省带宽,避免重复响应. 一般来说,可以将一个请求分为 ...

  3. N个数的数组求N-1个数组合乘积最大的一组

    /* 编程之美题,给定N个数的数组,只能使用乘法,不使用除法,找出N-1个数的乘积最大的一组,有两种方法,方法一:采用两个数组分别保存从左向右 和从又向左的两个乘积值,然后在扫描一次,求出最大乘积,空 ...

  4. malloc free 和new delete区别

    从网上看的学习之 1. malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符,与"+“.”-“.”*“.”/“有一样的地位. 2. new/delete是 ...

  5. oracle 创建索引

    一.索引简介 1.索引相当于目录 2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率. 3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取 ...

  6. HDU POJ 1015 Jury Compromise(陪审团的人选,DP)

    题意: 在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团.选m人的办法是:控方和辩方会根据对候 ...

  7. 基础 HTML之目录问题(相对路径和绝对路径区别)

    一.相对路径和绝对路径 相对路径:以引用文件之网页所在位置为参考基础,而建立出的目录路径.因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对. 绝对路径:以Web站点根目 ...

  8. gridview合并单元格

    记录用,以前写过,忘记了转自:http://marss.co.ua/MergingCellsInGridView.aspx public class GridDecorator { public st ...

  9. svn无法更新解决方案

    1.删除C:\Documents and Settings\用户名\Application Data\Subversion\auth下的文件,删除svn登录信息. 2.将eclipse中 window ...

  10. 关闭utorrent的广告

    版本:3.4.9 / 方法来源:wikihow. 在"选项-高级"里将下面的选项全部改成false. offers.left_rail_offer_enabledoffers.sp ...