OC中的宏定义
我们都知道,宏定义是编译期常量。而OC是一种动态语言。
1.iOS系统版本判断的两个宏定义
__IPHONE_OS_VERSION_MAX_ALLOWED // iOS系统版本最大允许
__IPHONE_OS_VERSION_MIN_REQUIRED // iOS系统版本最小需要
使用这俩宏,仅仅能消除编译器的警告而已。因为OC是动态语言,所以系统版本还需要判断。例如:

2.断言
/**
@brief 适用:Objective-C的方法
@param condition 条件.
@param desc 描述.
@return 若条件为NO,则工程崩溃且打印 desc.
*/
NSAssert(<#condition#>, <#desc, ...#>) /**
适用:C的函数
*/
NSCAssert(<#condition#>, <#desc, ...#>) /**
@brief 适用:Objective-C
@param condition 条件.
@return 若条件为NO,则工程崩溃.
*/
NSParameterAssert(<#condition#>) /**
适用:C
*/
NSCParameterAssert(<#condition#>)
NSAssert 用法:
Man *man = nil;
NSAssert(man, @"man Can't be empty.");
崩溃日志:
-- ::49.505 OC测试[:] *** Assertion failure in -[ViewController viewDidLoad], /Users/liuxianzhi/Desktop/OC测试/OC测试/ViewController.m:
-- ::49.515 OC测试[:] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'man Can't be empty.'
NSParameterAssert用法:
#pragma mark - View lifeCycle
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor orangeColor]; [self executeWithParam:nil];
} - (void)executeWithParam:(NSString *)param {
// param存在,程序继续;反之崩溃!
NSParameterAssert(param);
}
崩溃日志:
-- ::10.155 OC测试[:] *** Assertion failure in -[ViewController executeWithParam:], /Users/liuxianzhi/Desktop/OC测试/OC测试/ViewController.m:
-- ::10.164 OC测试[:] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: param'
尊重作者劳动成果,转载请注明: 【kingdev】
OC中的宏定义的更多相关文章
- 创建工程常量 (OC中的宏定义)
1.oc创建宏 文件 2.swift创建 常量文件 在swift中, 并非是预编译代码替换, 而是设置全局常量, 简单宏, 直接let 加常量名即可
- iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用
问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...
- C++中的内联函数和C中的宏定义的区别
在C++中内联函数: 内联函数即是在函数的声明和和定义前面加上“inline”关键字,内联函数和常规函数一样,都是按照值来传递参数的,如果参数为表达式,如4.5+7.5,则函数将传递表达式的值(这里为 ...
- Makefile中进行宏定义-***
实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解 ...
- C语言学习笔记--C语言中的宏定义
1. C 语言中的宏定义 (1)#define 是预处理器处理的单元实体之一(因此,预处理器只是简单的进行替换,并不(2)#define 定义的宏可以出现在程序的任意位置(包括函数体的内部)(3)#d ...
- Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D【转】
本文转载自:http://blog.csdn.net/maopig/article/details/7230311 在源代码里面如果这样是定义的:#ifdef MACRONAME//可选代码#en ...
- 内核中的宏定义__init、__initdata和__exit、__exitdata
__init.__initdata和__exit.__exitdata的定义位于<kernel/include/linux/init.h> /* These are for everybo ...
- [C++] C++中的宏定义详解
转载自:C++中的宏定义 和 C++宏定义详解 一.#define解析 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率 ...
- 20个C语言中常用宏定义总结
01: 防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H//头文件内容#endif 02: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...
随机推荐
- IT兄弟连 Java语法教程 Java的发展历程
只有少数几种编程语言对程序设计带来过根本性的影响.其中,Java的影响由于迅速和广泛而格外突出.可以毫不夸张的说,1995年Sun公司发布的Java1.0给计算机程序设计领域带来了一场变革.这场变革迅 ...
- linux 初始配置(centos)-网络和可视化界面
1. 执行命令查看ip:ip addr 2. 如果没有或取到,要查看网卡是否启动,及ip配置是否正确,请先将ONBOOT改成yes,表示开机即启动 [lobin@localhost ~]$ cat / ...
- [软件工程基础]Alpha 阶段发布说明
新功能 增加了题库界面,其上有历届考试资料 系统已知的问题和限制 物理实验报告的收藏功能还无法使用 物理实验报告还不能评论 题库界面显示有些问题 最主要的生成实验报告功能在绝大多数安卓平台上显示&qu ...
- Luogu P3384 【模板】树链剖分
...rt...安利一发大佬博客https://www.cnblogs.com/ivanovcraft/p/9019090.html 注意:不要把dfn和rw弄混了... #include<cs ...
- python2 学习 数据类型和变量
数据类型和变量 数据类型 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时 ...
- 使用docker save load 的时候的一个小问题
当你使用docker save image_id > aa.tar ; 然后再使用 docker load < aa.tar 时, 你会发现此时导入的镜像的repository和 tag ...
- Spark Mllib里使用贝氏二元分类时如何将数值特征字段用StandardScaler进行标准化(图文详解)
不多说,直接上干货! NaiveBayes数值特征字段一定要大于0,所以加入下述命令将负数转换为0. 朴素贝叶斯分类算法在进行数据标准化时,参数withMean必须设置为false. 具体,见 Had ...
- Fedora12下yum安装低版本gcc
1.Fedora12下gcc位置及其版本如下: 2.根据需要,要安装低版本的gcc,直接用"yum install gcc"安装时默认是安装最新版本的gcc,如下: 3.可先通过& ...
- Fleet-运行一个高可用的服务
运行一个高可用的服务 使用CoreOS最大的好处就是你可以以高可用的方式来运行你的服务.接下来我们将部署两个一样的Apache web server容器.然后,我们将通过让一台机器出现故障,fleet ...
- JSON(未完待续,等讲到对象时再加)
1 定义 JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON 使用 Jav ...