iOS开发学习专题-基础知识(四) NSNumber容器 NSData数据 NSData转换的详细使用方式

来源:互联网 发布:网络自学英语 编辑:程序博客网 时间:2024/05/17 14:28

本文主要讲解的是 NSNumber容器NSData数据NSData转和NSString、UIImage、NSdictionary等转换的详细使用方式

文章是博主原创,转载请标明出处http://blog.csdn.net/werctzzz/article/details/72188609


NSNumber是一个子类,NSValue为它提供了一个值作为任何C标量(数字)类型。它定义了一组方法特别用于设置和访问值作为符号或无符号char,short int,int,long int,long long int,float,或double或作为BOOL。

#pragma mark NSNumber详细使用    // 1.基本数据类型封装为对象 初始化    NSNumber *n1 = [NSNumber numberWithInt:12];    int a = 10;    float f1 = 3.23f;    double d1 = 2.34;    NSNumber * n2 = [NSNumber numberWithInt:a];    NSNumber * n3 = [NSNumber numberWithFloat:f1];    NSNumber * n4 = [NSNumber numberWithDouble:d1];        // 2.通过数组实现简单的计算    NSMutableArray *array = [[NSMutableArray alloc]init];    [array addObject:n1];    [array addObject:n2];    [array addObject:n3];    [array addObject:n4];    // ⭐️知识点:@(变量名)把括号内容转换为NSNumber对象    [array addObject:@18];    NSNumber * n5 = array[0];    int a1 = [n5 intValue];  //获取对象的整形值    NSNumber * n6 = array[2];    float f2 = [n6 floatValue];    // 计算    int a2 = [array[0] intValue]+[array[2] floatValue];    int a3 = a1 + f2;    NSLog(@"%d%d%d",a1,a2,a3);    // 数组、字典中只能存放OC对象, 不能存放int、float、double等基本数据类    // 如果要把int、float、double放进数组或字典中, 需要把他们用NSNumber包装成对象        // 3.判断两个NSNumber是否相等    BOOL ret = [n1 isEqualToNumber:n3]; //这种比较也是可以跨不同对象的,比如:比较intNumber和floatNumber        // 4.比较两个整型的NSNumber的大小    if ([n1 compare:n2] == NSOrderedAscending) {             NSLog(@"<");//小于         }else if([n1 compare:n2] == NSOrderedSame){                 NSLog(@"=");//等于             }else if([n1 compare:n2] == NSOrderedDescending){                     NSLog(@">");//大于                 }
在开发中,我们需要把一些信息(图片,文字,视频等等)写入到文件、存储或是发送到网络服务器的时候,需要把这些数据转换变成把各种数据转换成二进制。

NSData能帮我们完成这个任务

#pragma mark NSData详细使用    // 1.初始化data对象    NSData * data = [[NSData alloc]init];    // 我们可以查看NSData的创建方法,由下可知,我们的data可以通过很多类型来初始化,当然我们也可以把data用在别的类型初始化上    //    + dataWithBytes:length:    //    + dataWithContentsOfFile:    //    + dataWithContentsOfMappedFile:    //    + dataWithContentsOfURL:    //    + dataWithData:        // 2.NSData的常用转换        // 2.1 NSString        NSString * aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];        NSString * bStr = @"1234abcd";        NSData * data1 = [bStr dataUsingEncoding: NSUTF8StringEncoding];            // 2.2 UIImage        // 从本地文件沙盒中取图片并转换为NSData        NSString * bundlePath = [[NSBundle mainBundle] bundlePath];        NSString * name = [NSString stringWithFormat:@"test.png"];        NSString * imgPath = [bundlePath stringByAppendingPathComponent:name];        NSData *imageData = [NSData dataWithContentsOfFile:imgPath];        // NSData 转换成 UIImage 类型        UIImage *aImage = [UIImage imageWithData: imageData];        // UIImage 转换成 NSData 类型        NSData * imgData = UIImagePNGRepresentation(aImage);        // 3.NSData 归档解档 数组、字典的转换    NSDictionary * dataDic = [NSDictionary dictionaryWithObjectsAndKeys:                             @"v1",@"k1",                             @"v2",@"k2",                             @"v3",@"k3",                             @"v4",@"k4",nil];    // 转成NSData    NSData * filedata = [NSKeyedArchiver archivedDataWithRootObject:dataDic];    // 归档    NSString * filepath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"file.list"];    // 存到名为@"file.list"的文件里面    NSFileManager * manager = [NSFileManager defaultManager];    [manager createFileAtPath:filepath contents:filedata attributes:nil];    // 解档    // 直接从文件还原    NSDictionary * undataDic1 = [NSKeyedUnarchiver unarchiveObjectWithFile:filepath];    // 通过NSData还原    NSData * unfiledata = [manager contentsAtPath:filepath];    NSDictionary * undataDic2 = [NSKeyedUnarchiver unarchiveObjectWithData:unfiledata];    // ⭐️其实无论是数组,还是字典,归档,解档都是一样可以


阅读全文
0 0