标签:
NSNumber: 是OC中处理数字的一个类
NSValue是NSNumber的子类
如何处理:
把int,float,double 包装成一个对象
使用NSNumber的好处:
可以把基本数据类型的数据,保存到数组或字典中
// 定义基本数据类型 int a = 10; float b = 2.2f; double d = 1.22; int x = 100; // int 包装成 NSNumber NSNumber *intObj = [NSNumber numberWithInt:a]; NSMutableArray *array = [NSMutableArray arrayWithObjects: intObj, nil]; // float 包装成 NSNumber NSNumber *floatObj = [NSNumber numberWithFloat:b]; // 把对象添加到数组中 [array addObject:floatObj]; // double 包装成 NSNumber NSNumber *doubleObj = [NSNumber numberWithDouble:d]; // 把对象添加到数组中 [array addObject:doubleObj]; // @数值,把数值包装成对象,快速简单的方法 [array addObject:@(x)]; NSLog(@"%@",array); // 数组的第一个元素和第二个元素相加 NSNumber *n1 = array[0]; // 取出第0位元素 int a1 = [n1 intValue]; NSNumber *n2 = array[1]; // 取出第1位元素 float a2 = [n2 floatValue]; //a1 = a1+a2; // 简洁 a1 = [array[0] intValue] +[array[1] floatValue]; NSLog(@"%d",a1);
NSValue:主要是用来把指针,CGRect结构体等包装成OC对象,以便储存
CGPoint p1 = CGPointMake(3, 5); CGRect r1 = CGRectMake(0, 3, 5, 9); NSMutableArray *arr = [NSMutableArray array]; // p1包装成 obj NSValue *pointValue = [NSValue valueWithPoint:p1]; // 把对象存到数组中 [arr addObject:pointValue]; // 把r1 包装成 NSValue对象 [arr addObject:[NSValue valueWithRect:r1]]; NSLog(@"%@",arr); // 取出r1 的值 NSValue *r1Value = [arr lastObject]; NSRect r2 = [r1Value rectValue]; NSLog(@"%@", NSStringFromRect(r2));
包装struct
// 定义日期结构体 typedef struct Date { int year; int month; int day; } MyDate; int main(int argc, const char * argv[]) { @autoreleasepool { // 年—月-日 MyDate nyr = {2015, 9, 11}; // @encode(MyDate)作用,把MyDate类型生成一个常量字符串描述 NSValue *val = [NSValue valueWithBytes:&nyr objCType:@encode(MyDate)]; // 定义一个数组,把val存到数组中 NSMutableArray *arr = [NSMutableArray arrayWithObject:val]; /* 从数组中取出来NSValue对象 从对象中,取出结构体变量的值 传入一个结构体变量的地址 */ MyDate tmd; [val getValue:&tmd]; NSLog(@"%d, %d. %d",tmd.year, tmd.month, tmd.day);
Objective-C( Foundation框架 一 NSNumber(NSValue))
标签:
原文地址:http://www.cnblogs.com/1023843587qq/p/4802156.html