黑马程序员 oc随记 NSNumber、NSValue与NSDate

本文介绍了Objective-C中如何使用NSNumber和NSValue来封装基本数据类型及特殊类型数据,以便于存储在NSArray或NSDictionary中,并展示了NSDate的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- android培训java培训ios培训、期待与您交流! ----------

一、NSNumber

我们之前所学的nsarray(创建数组)nsdictionary(字典)只能存放oc对象,不能存放基本数据类型的数据,如果想将基本数据类型的数据存储入数组或者字典中,nsnumber就是一个很好的方法。

nsnumber的作用是将一个基本数据类型的数据包装成一个oc对象,如此就可让基本数据类型的数据存储入数组或者字典中。

例:

#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        int a=10;

        float f=3.14f;

        double d=3.1212;

        NSNumber *num=[NSNumber numberWithInt:a]; //包装一个int类型的基本数据

        NSLog(@"%@",num);

        NSMutableArray *arr=[NSMutableArray arrayWithObject:num];

        NSLog(@"%@",arr);  //此时a已经被添加入数组中,同理可得

        NSNumber *num2=[NSNumber numberWithFloat:f];

        NSNumber *num3=[NSNumber numberWithDouble:d];

        [arr addObject:num2];

        [arr addObject:num3];

        NSLog(@"%@",arr); //此时,float类型的fdouble类型的d也添加入arr数组中,注意,要使用这种额外添加的方法,必须使用nsmutablearrar而不是nsarray

        //接着,我们可以尝试将值从arr数组中取出.

        NSNumber *num4=arr[0];//创建一个nsnumber类型的值来保存从数组中取出的数

        NSNumber *num5=arr[1];

        NSNumber *num6=arr[2];

        NSLog(@"%@",num4);

        int a2=[num4 intValue];  //使用xxxvalue来使nsnumber类型的值转化为基本数据类型

        float f2=[num5 floatValue];

        double d2=[num6 doubleValue];

        NSLog(@"%d,%f,%lf",a2,f2,d2);

    }

    return 0;

}


二、NSValue

  NSNumber其实是NSValue的子类,NSValue主要用来把指针,cgrect等包装成oc对象以便存储,也就是说,它除了可以包装基本类型数据外还可以包装更多的特殊类型数据以存储。


#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

    @autoreleasepool {

       NSRect r1= NSMakeRect(0, 0, 10, 100);

        NSValue *v1=[NSValue valueWithRect:r1]; //nsrect转化成nsvalue

        NSMutableArray *m1=[NSMutableArray arrayWithObject:v1];  //v1存储到nsmutablearray形式的m1

        NSLog(@"%@",m1);  //打印出来便是存储在数组中的r1的值

        CGPoint c1=CGPointMake(12, 31);

        v1=[NSValue valueWithPoint:c1];

        [m1 addObject:v1];

        NSLog(@"%@",m1);//同样可将cgpoint存储入数组中

        //接着,尝试一下取出

        NSValue *v2 = m1[0];

        NSRect r2=[v2 rectValue];

        v2=m1[1];

        CGPoint c2=[v2 pointValue];

        NSLog(@"%@,%@",NSStringFromRect(r2),NSStringFromPoint(c2));  //成功取出

    }

    return 0;

}


三、NSDate

NSDate可以用来表示时间,可以进行一些常见的日期、时间的处理

一个NSDate对象就代表一个时间,[NSDate da te]返回的就是当前的时间

例:

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        NSDate *d1=[NSDate date];

        NSLog(@"%@",d1);

        

    }

    return 0;

}

显示时间:2015-08-13 18:45:01.641 练习[23980:2584787] 2015-08-13 10:45:01 +0000

注意,这个时间是格林威治的时间,即经度0度的时间,要想转变成当地的时间,我们可以:

#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        NSDate *d1=[NSDate date];

        NSLog(@"%@",d1);

        NSDateFormatter *f=[NSDateFormatter new];

        f.dateFormat=@"yyyyMMdd HH:mm:ss"//注意 @中的字母都是不可更改的,分别代表了年月日时分秒的英文字母,大小写也不可更改

        NSString *s1=[f stringFromDate:d1];

        NSLog(@"%@",s1);

        //如此便格式化了时间,即为当地时间。

        

    }

    return 0;

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值