黑马程序员——Foundation框架——包装类以及NSDate

本文介绍了Objective-C中NSNumber和NSValue类的应用,用于包装基础数据类型以便于在集合类中使用,并探讨了NSDate类提供的日期时间操作方法。

------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];
    
    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值