------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
在复习了Foundation的集合类之后,继续我的Foundation复习。
一、NSNumber和NSValue
在Foundation框架中,为我们提供了NSNumber和NSValue两个包装类,分别是用来包装数字数据类型,和任意类型。NSNumber继承自NSValue。
在上一篇博文复习集合类的时候,我曾经在笔记中看到一个重点知识。是说NSArray及其子类,他们的元素只能包含OC对象。
但是在实际开发当中,我们不可避免的需要保存一些基本数据类型到NSArray中,这时该怎么办呢?
这时候就需要用到NSNumber和NSValue这两个包装类。来对我们的基本数据类型进行包装。这样就可以解决比如Char、Int、Float、Double、enum以及结构体等等这些数据类型无法存放的尴尬之处。
1.NSNumber主要用来包装一些数字,例如:
BOOL、char、int、float、double等。代码练习如下:
NSMutableArray *array = [NSMutableArray array];
//包装成NSNumber对象
NSNumber *number = [NSNumber numberWithInt:124];
[array addObject:number];
//取出
NSNumber *number1 = [array lastObject];
//再将NSNumber转化成Int
int i = [number1 intValue];
2.NSValue是NSNumber的父类,功能更加强大。它可以包装一些Foundation框架或是我们自己定义的结构体。
NSPoint p = NSMakePoint(1440, 90);
//包装结构体
NSValue *value = [NSValue valueWithPoint:p];
//将NSValue转化成 结构体
p = [value pointValue];
//包装 自己定义的结构体时
typedef struct {
int hour;
int min;
int sec;
}Time;
Time time = {12, 0, 0};
NSValue *v = [NSValue value:&time withObjCType:@encode(Time)];
二、NSDate
NSDate顾名思义,这是一个日期时间的类,和Java一样包含 年月日 和 时分秒。并且同样提供了非常丰富的日期时间操作方法。
以下我选取一部分笔记中常使用的方法:
//声明日期
NSDate *date = [NSDate date];
//从当前时间增加 指定 秒数
date = [NSDate dateWithTimeIntervalSinceNow:10];
//从1970-1-1 00:00:00开始 增加 指定 秒数
date = [NSDate dateWithTimeIntervalSince1970:10];
//随机返回一个 非常遥远的未来时间
date = [NSDate distantFuture];
//随机返回一个 非常遥远的过去时间
date = [NSDate distantPast];
//返回1970到现在的毫秒数
double sec = [date timeIntervalSince1970];
//比较
double sec1 = [date timeIntervalSinceDate:[NSDate date]];
NSDate *date2 = [NSDate date];
//返回较早的时间
[date earlierDate:date2];
//返回较晚的时间
[date laterDate:date2];
//时间格式化
date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
//时间转字符串
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString * str = [formatter stringFromDate: date];
//字符串转时间
str = @"2077-11-30 12:00:00";
date = [formatter dateFromString:str];
本文介绍了Objective-C中NSNumber和NSValue类的应用,用于包装基础数据类型以便于在集合类中使用,并探讨了NSDate类提供的日期时间操作方法。

614

被折叠的 条评论
为什么被折叠?



