黑马程序员——foundation框架之NSNumber,NSDate,NSValue

来源:互联网 发布:origin有mac版吗 编辑:程序博客网 时间:2024/05/17 03:42
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
NSNumber
NSNumber可以将基本数据类型包装起来,形成一个对象,这样就可以给其发送消息,装入NSArray中等等。
NSNumber * intNumber=[NSNumber numberWithInt:100];
NSNumber *floatNumber=[NSNUmber numberWithFloat:100.00];
int i=[intNumber intValue];
if([intNumber isEqualToNumber:floatNumber]) ....
NSNumber继承NSObject ,可以使用比较 compare: isEqual等消息
下面是MJ老师上课的代码
<span style="font-size:14px;">#import <Foundation/Foundation.h>int main(){    // @20  将 20包装成一个NSNumber对像            NSArray *array = @[        @{@"name" : @"jack", @"age" : @20},        @{@"name" : @"rose", @"age" : @25},        @{@"name" : @"jim", @"age" : @27}    ];            // 将各种基本数据类型包装成NSNumber对象    @10.5;    @YES;    @'A'; // NSNumber对象        @"A"; // NSString对象                // 将age变量包装成NSNumber对象    int age = 100;    @(age);    //[NSNumber numberWithInt:age];            NSNumber *n = [NSNumber numberWithDouble:10.5];            int d = [n doubleValue];                int a = 20;        // @"20"    NSString *str = [NSString stringWithFormat:@"%d", a];    NSLog(@"%d", [str intValue]);        return 0;}void test(){    NSNumber *num = [NSNumber numberWithInt:10];        NSDictionary *dict =  @{    @"name" : @"jack",            @"age" : num        };        NSNumber *num2 = dict[@"age"];            int a = [num2 intValue];        NSLog(@"%d" , a);}</span>

NSData

使用文件时,需要频繁地将数据读入一个临时存储区,它通常成为缓冲区

NSData类提供了一种简单的方式,它用来设置缓冲区、将文件的内容读入缓冲区,或将缓冲区的内容写到一个文件。

对于32位应用程序,NSDATA缓存区最多可以存储2GB的数据。

我们既可定义不变缓冲区(NSData类),也可定义可变的缓冲区(NSMutableData类)。

下面代码展示了如何将文件的内容读入内存缓冲区,然后再将缓冲区的内容写入到另一个文件中。

<span style="font-size:14px;">NSData *fileData;NSFileManager *fileManager = [[NSFileManager alloc]init];fileData = [fileManager contentsAtPath:path];  [fileManager createFileAtPath:path2 contents:fileData attributes:nil];   //采用默认的属性值</span>

类型转换 NSData -> NSString

NSString *strData = [[NSString alloc]initWithData:fileData encoding:NSASCIIStringEncoding];

类型转换 NSString -> NSData

NSData *fileData2 = [strData dataUsingEncoding:NSUTF8StringEncoding];


然后接上MJ老师上课的代码

#import <Foundation/Foundation.h>int main(){    // 09/10/2011    NSString *time = @"2011/09/10 18:56";        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    formatter.dateFormat = @"yyyy/MM/dd HH:mm";        NSDate *date = [formatter dateFromString:time];    NSLog(@"%@", date);    return 0;}void date2string(){    NSDate *date = [NSDate date];            // 日期格式化类    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];        // y 年  M 月  d 日    // m 分 s 秒  H (24)时  h(12)时    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";        NSString *str = [formatter stringFromDate:date];        NSLog(@"%@", str);}void use(){    // 创建一个时间对象    NSDate *date = [NSDate date];    // 打印出的时候是0时区的时间(北京-东8区)    NSLog(@"%@", date);        NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];            // 从1970开始走过的秒数    NSTimeInterval seconds = [date2 timeIntervalSince1970];        // [date2 timeIntervalSinceNow];}

NSValue

首先要明白的是NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue

并且我们在C/C++开发中常会用到结构体来帮助我们简单封装基本数据类型,在Objective-C中我们也可以使用结构体来完成数据类型的封装。同时,Cocoa Touch还提供了一个NSValue来帮助我们更好地在开发中使用结构体。

代码如下

#import <Foundation/Foundation.h>int main(){        // 结构体--->OC对象        CGPoint p = CGPointMake(10, 10);    // 将结构体转为Value对象    NSValue *value = [NSValue valueWithPoint:p];        // 将value转为对应的结构体    // [value pointValue];        NSArray *array = @[value ];    // NSLog(@"这是哥修改过的东西6");    return 0;}
至此所有的oc基础课程就已经基本看完了

还是要终结下自己在学习oc的过程中出现的各种问题,在接触oc之前还算有c语言的基础,但是对面向对象的基础一点也没有,因为之前自己一直不怎么喜欢java,所以就没学java导致现在在学习oc的过程中对面向对象的理解不够深刻,以至于很多简单的地方总是要理解很久才能够想通。oc的基础部分前前后后差不多学了一个多月的时间,比自己预计的时间要多一些,但是还好,自己感觉收获也挺多的,真心感谢MJ老师为我们认真的上课,以及论坛的小伙伴们,有什么问题都能够及时的帮助我,希望自己在接下来的日子能够更加深入的学习oc,也希望黑马程序员越办越好。



---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
0 0