一,空值汇总:
1,空值的含义
意义 |
例子 |
|
nil |
对象为空 |
NSObject* obj = nil; |
Nil |
类为空 |
Class someClass = Nil; |
NULL |
基本数据对象指针为空(c语言) |
int *pointerToInt = NULL; char *pointerToChar = NULL; struct TreeNode *rootNode = NULL; |
NSNull |
集合对象无法包含 nil 作为其具体值,如NSArray、NSSet和NSDictionary。相应地,nil值用一个特定的对象NSNull 来表示。NSNull 提供了一个单一实例用于表示集合对象属性中的的nil值 |
NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary]; mutableDictionary[@"someKey"]= [NSNull null]; |
2,空值类型说明符
意义 |
使用场合 |
|
nonnull/nullable |
nullable表示对象可以是 NULL 或 nil;而nonnull 表示对象不应该为空(其他两个类似) |
对于属性、方法返回值、方法参数的修饰,使用: nonnull/nullable |
_Nonnull/_Nullable |
同上 |
对于 C 函数的参数、Block 的参数、Block 返回值的修饰,使用: _Nonnull/_Nullable |
__nullable 和__nonnull |
同上 |
建议弃用 __nonnull/__nullable |
宏的使用 |
NS_ASSUME_NONNULL_BEGIN 和NS_ASSUME_NONNULL_END 。在这两个宏之间的代码,所有简单指针对象都被假定为nonnull ,因此我们只需要去指定那些 nullable 指针对象即可 |
二,空值过滤及数据类型转换汇总
开发中,经常要过滤空值数据,数据类型转换,在此特地在githut新建了一个项目专题(大彩蛋):点击打开链接
三,枚举汇总
1,C语言用法
1,定义枚举类型enum Test
{
TestA = 0,
TestB = 1,
TestC = 2,
TestD = 3
};
2,定义枚举类型的同时,定义枚举变量
enum Test
{
TestA = 0,
TestB,
TestC,
TestD
} test;
3,采用typedef来定义
typedef enum _Test
{
TestA = 0,
TestB,
TestC,
TestD
} Test;
4,采用typedef匿名定义
typedef enum
{
TestA = 0,
TestB,
TestC,
TestD
} Test;
使用方法:Test test = TestB;
2,OC用法:
1,采用NS_ENUM的一般枚举typedef NS_ENUM(NSInteger, Test)
{
TestA = 0,
TestB,
TestC,
TestD
};
2,采用NS_OPTIONS的移位枚举
typedef NS_OPTIONS(NSUInteger, Test) {
TestNone = 0,
TestA = 1 << 0,
TestB = 1 << 1,
TestC = 1 << 2,
TestD = 1 << 3
};
使用:Test test = TestA | TestB;
if (test & TestA)
{
NSLog(@"yes");
}
else
{
NSLog(@"no");
}
四,随机数汇总
1. srand((unsigned)time(0)); //不加这句每次产生的随机数不变
int i = rand() % 5;
2. srandom(time(0));
int i = random() % 5;
3. int i = arc4random() % 5 ;
获取一个随机整数,范围在[from,to],包括from,包括to-(int)getRandomNumber:(int)from to:(int)to
{
return (int)(from + (arc4random() % (to – from + 1)));
}
注:rand()和random()实际并不是一个真正的伪随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样。
arc4random() 是一个真正的伪随机算法,不需要生成随机种子,因为第一次调用的时候就会自动生成。而且范围是rand()的两倍。在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值则是 0x100000000 (4294967296)。
精确度比较:arc4random() > random() > rand()。
五,四舍五入数据汇总
1,天花板函数:ceil(x)返回不小于x的最小整数值(然后转换为double型)。
2,地板函数:floor(x)返回不大于x的最大整数值。
3,四舍五入函数:round(x)返回x的四舍五入整数值。
//保留两位小数,四舍五入CGFloat rounded_up = round(0.355 * 100) / 100;
NSLog(@"%.2lf",rounded_up);
//保留两位小数,直接进1(天花板函数)CGFloat rounded_up1 = ceilf(0.355 * 100) / 100;
NSLog(@"%.2lf",rounded_up1);
//保留两位小数,舍弃后面所有位数。(地板函数)
CGFloat rounded_up2 = floor(0.355 * 100) / 100;
NSLog(@"%.2lf",rounded_up2);