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: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...
随机推荐
- 剑指Offer的学习笔记(C#篇)-- 对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 一 . 题目分析 递归法. 一.空树判断,单独搞出来. 二.非空树. 递归:一 ...
- Java-GC-标记清除算法
## 前置知识 静态变量在类被加载的时候分配内存.当我们启动一个App的时候,系统会创建一个进程,此进程会加载一个JVM的实例,然后代码就运行在JVM之上.也就是说类在被加载的时候,静态变量 --- ...
- eosiolib文件解析
Source base on EOS version: 1.0.5,some photo except. 在eos源码中,eosiolib库在源码中的位置如下: 在\eos\contracts\e ...
- IntelliJ IDEA 打包Maven 构建的 Java 项目
方法 2,一键生成方便到哭 打开maven项目路径 一键生成 3.生成jar 目标文件在 path/target/xx.jar下面 方法 1 选中Java项目工程名称,在菜单中选择 F ...
- Linux新硬盘、分区、格式化、自动挂载
1.给硬盘分区 fdisk /dev/sdaCommand (m for help): nCommand actione extendedp primary partition (1-4)输入:ePa ...
- Linux操作学习笔记1
Linux只有一个根目录/,所有的文件和设备都当成是文件进行管理: pwd 打印当前工作目录 (print working directory) whoami ls 列出当前目录面的文件 ls -l ...
- 079 Word Search 单词搜索
给定一个二维面板和一个单词,找出该单词是否存在于网格中.这个词可由顺序相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被重复使用.例如,给定 二 ...
- Jenkins+Gitlab+Ansible自动化部署(四)
接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...
- 使用一条sql语句查询多表的总数
SELECT sum(列名1) 列名1,sum(列名2) 列名2,sum(列名3) 列名3 FROM ( SELECT count(*) 列名1, 列名2, 列名3 FROM 表1 -- WHERE ...
- is 和 == 区别 编码的问题 id()函数
一丶is 和 == 的区别 == 比较的是值 is 比较的是内存地址 #字符串 a = "abc" b = "abc" print(a == b) print( ...