您的位置:首页 > 产品设计 > UI/UE

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

2014-06-19 05:57 417 查看
----------------------
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培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐