ios开发常用的宏,ios可以用宏吗

ios有自带的一键宏吗

有。

网站的建设创新互联建站专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为活动板房等企业提供专业服务。

标准中一些预定义的宏

C标准中指定了一些预定义的宏,对于编程经常会用到。下面这个表中就是一些常常用到的预定义宏。

意义

__DATE__

进行预处理的日期(“Mmm dd yyyy”形式的字符串文字)

__FILE__

代表当前源代码文件名的字符串文字

__LINE__

代表当前源代码中的行号的整数常量

__TIME__

源文件编译时间,格式微“hh:mm:ss”

__func__

当前所在函数名

IOS开发 宏定义函数

系统宏汇集

__FILE__

当前文件所在目录

__DATE__

“替代文字”是一个含有编译日期的字符串字面值,日期格式为“mm dd yyyy”(例如:“Mar 19 2006”)。如果日期小于10日,就在日的前面放一个空格符。NSLog(@"_DATE_=%s",__DATE__);

__FUNCTION__

当前函数名称

__LINE__

当前语句在源文件中的行数

__TIME__

此字符串字面值包含编译时间,格式为“hh:mm:ss”(范例:“08:00:59”)。

__STDC__

整数常量1,表示此编译器遵循ISOC标准。

__STDC_VERSION__

如何实现复合C89整部1,则这个宏的值为19940SL;如果实现符合C99,则这个宏的值为199901L;否则数值是未定义

__STDC_EOBTED__

(C99)实现为宿主实现时为1,实现为独立实现为0

__STDC_IEC_559__

(C99)浮点数实现复合IBC 60559标准时定义为1,否者数值是未定义

__STDC_IEC_559_COMPLEX__

(C99)复数运算实现复合IBC 60559标准时定义为1,否者数值是未定义

__STDC_ISO_10646__

(C99)定义为长整型常量,yyyymmL表示wchar_t值复合ISO 10646标准及其指定年月的修订补充,否则数值未定义

iOS 系统基础库

Category/Util

sstoolkit    一套Category类型的库,附带很多自定义控件 功能不错~

BlocksKit    将Block风格带入UIKit和Founcation

cocoa-helpers    一些Cocoa的扩展 2年前的工程

CoconutKit    一系列扩展和一些自定组件

STUtils    一系列扩展包

PSFoundation    一系列扩展 和功能增强

ConciseKit    一系列宏定义 挺有意思

DTFoundation    又一系列扩展。。。

BBBootstrap    一些常见功能的扩展库

cooliris-toolkit    cooliris出品的基础工具库,从GoogleCode clone过来

BaseKit    一套基础工具库

NSObject-Utility-Categories    如题

NSArray-Utilities    如题

aqtoolkit    一些常用的东西

DLIntrospection    一些NSObject的扩展

NSDate-Extensions    如题日期

ALActionBlocks    在UIControl上添加的Block事件

jrswizzle    主要是swizzling

moriarty    一些还算有用的功能

QSUtilities    一些基础库 (Instagram有用到)

libextobjc    一堆oc的扩展

PrettyTimestamp    友好时间的扩展

ios-jail-break-detector    检测是否越狱 有上线

crackify    检测App是否被破解

NSBundle-OBCodeSigningInfo    检查当前签名、Sandbox状态 MacOSX

UIView-AnimatedProperty    为UIView添加动画效果的property,有用到swizzle

Block-KVO    Block风格的KVO~

MTDates    一些Data的category

CocoaSecurity    常见的哈希、加密解密算法

sskeychain    访问keychain 支持iOS Mac

ABContactHelper    访问联系人

UISS    用JSON的风格设置UIKit样式

Underscore.m    仿JS的underscore.js来写的,用于访问和处理数据

TICoreDataSync    在不同设备间对CoreData进行同步 (iPhone iPad Mac)

SoloComponents-iOS    几个轻量的组件,没什么用,2年没更新

MAObjCRuntime    将运行时包装成ObjC

Objective-C-Generics    通过宏定义勉强实现的范型

TBMacros    一些常用的宏定义

NSString-Ruby    为Ruby程序员带来的字符串相关功能

ObjectiveRecord    CoreData包装的活动记录 有RoR风格的API

FastImageCache    滑动时快速显示图片的库,Path开发

iOS宏定义介绍

在了解宏定义的使用前,需要说明一下合理使用宏定义确实可以提高程序的可读性,但是滥用宏定义,也会带来一些害处。这里对宏定义使用的优缺点做个简单的说明:

宏可以分为两类,一类称为对象宏,一类称为函数宏

对象宏可以定义一个量,如圆周率:

通过宏可以拿到这个变量:

打印结果:

但是看一下另外一种情况:

结果如下:

为什么*2的结果不是140,是110呢?

因为前面提到过了,宏只是简单地替换,所以 2的时候,实际是30+40 2

函数宏的作用就类似于一个函数一样。如:

其结果如下:

再来看另外一个例子:

这里需要注意一个问题,如果宏太长,可以使用"/"进行换行

这样便是大大增加了可读性

在OC中使用字符串都需要使用@"",如果想直接使用字符串可以添加一个"#":

再看一个关于##的操作符,连接符##用来将两个token连接为一个token:

提到可变参数宏,其实能够想到的,最多的便是NSLog。可变参数,可以利用 VA__ARGS进行读取:

打印结果如下:

iOS开发之枚举用法使用

前言

Enum,也就是枚举,从C语言开始就有了,C++、Java、Objective-C、Swift这些语言,当然都有对应的枚举类型,功能可能有多有少,但是最核心的还是一个—规范的定义代码中的状态、选项等“常量”。

举个例子,我们想要在开发中根据四季的变化做不同的操作,我们首先想到的可能会是定义一个int型变量,通过为该变量赋不同的`值来表示四季(e.g. 1为春天,2为夏天,3为秋天,4为冬天).但是,对于阅读该份代码的人来讲,他们并不能在短时间内就明白数字1234所代表的具体含义.这个时候,选择使用枚举则可以应对该需求

C语言中的枚举

在C语言中定义枚举类型的方式如下

enum 枚举名称{ 标识符 = 整型常量, 标识符 = 整型常量, 标识符 = 整型常量, 标识符 = 整型常量};

以"定义一个枚举名称为Test,拥有TestA、TestB等枚举成员的枚举类型"为例,定义方式如下

enum Test{ TestA = 0, TestB = 1, TestC = 2, TestD = 3};

注1: 当枚举成员都未设置"=整型常量"时,默认从第一个标识符开始,从0依次递增加1

注2: 当为某个枚举成员设置"=整型常量"时,其后面的标识符会在此基础上依次递增加1

在使用该枚举类型时,我们需要创建一个枚举变量

enum 枚举名称 枚举变量 = 枚举变量值;

以"创建一个枚举名称为Test的枚举变量test,并为其赋值TestB"为例

enum Test test = TestB;

注: 枚举变量值的取值只能从对应枚举类型的枚举成员中选择

我们也可以在定义枚举类型的同时定义枚举变量,该枚举变量不用初始化,可直接对其进行赋值并使用

enum Test{ TestA = 0, TestB, TestC, TestD} test;

注: 该枚举名称可以省略,直接定义枚举变量即可(称作"匿名枚举")

通过typedef为枚举类型设置一个"别名",这样便可以像使用int一样使用枚举类型

typedef enum _Test{ TestA = 0, TestB, TestC, TestD} Test;

定义"别名"后,便可采用如下方式定义枚举变量

Test test = TestB;

针对匿名枚举,在通过typedef设置"别名"便变成如下形式

typedef enum{ TestA = 0, TestB, TestC, TestD} Test;

定义"别名"后,便可采用如下方式定义枚举变量

Test test = TestB;

OC语言中的枚举

在Objective-C语言中,Apple在iOS6中引入了两个宏来重新定义枚举类型(即:NS_ENUM与NS_OPTIONS),这两者在本质上并没有差别,都是用于定义枚举类型,但是在使用中NS_ENUM多用于一般枚举,而NS_OPTIONS则多用于带有移位运算的枚举

NS_ENUM使用示例

typedef NS_ENUM(NSInteger, Test){ TestA = 0, TestB, TestC, TestD};

NS_OPTIONS使用示例

typedef NS_OPTIONS(NSUInteger, Test) { TestA = 1 0, TestB = 1 1, TestC = 1 2, TestD = 1 3};

typedef NS_OPTIONS(NSUInteger, Test) { TestNone = 0, TestA = 1 0, TestB = 1 1, TestC = 1 2, TestD = 1 3};

带有移位运算的枚举多用于同一个枚举变量可以同时赋值多个枚举成员的情况,其原理就是将各个枚举值按位或(|),因为移位运算的枚举成员可以保证按位或(|)计算之后结果的唯一性,所以每种结果都能反向计算出是由哪几个枚举成员按位或(|)而成

以"使用按位或(|)为枚举变量test同时赋值枚举成员TestA、TestB与TestC"为例

Test test = TestA | TestB;test |= TestC;

以"使用按位异或(^)为枚举变量test去掉一个枚举成员TestC"为例

Test test = TestA | TestB | TestC;test ^= TestC;

注: 如果枚举变量test本身并未赋值TestC,那么使用按位异或(^)会为枚举变量test多赋值一个枚举成员TestC

以"使用按位与()判断枚举变量test是否赋值了枚举成员TestA"为例

Test test = TestA | TestB;if (test TestA){ NSLog(@"yes");}else{ NSLog(@"no");}

总结

以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。


新闻标题:ios开发常用的宏,ios可以用宏吗
文章位置:http://pwwzsj.com/article/dschooe.html