Objective-C之Foundation框架NSNumber、NSNull、NSValue、NSDate用法介绍

1、NSNumber:
NSArray、NSDictionary不允许放基本数据类型
NSNumber可以把基本数据类型包装成对象,这样就可以间接的把基本数据类型放入NSArray、NSDictionary中

2、NSValue:
NSNumber是NSValue的子类,但是NSNumber只包装数字类型,NSValue可以包装任何值,也可以用NSValue包装结构体后加入NSArray、NSDictionary等集合
创建NSValue的方法
- (id)intWithBytes:(const void *)value objCType:(const char *)type
+ (NSValue *)valueWithBytes:(const void *) objcType:(const char *)type
+ (NSValue *)value:(const void *)value vithObjCType:(const char *)type
value参数是想要包装的数据地址(如一个NSPoint的地址,可以用&来取地址),type参数是用来描述这个数据类型的字符串,用@encode指令生成


//获取所包装的数据,保存到value这个地址
- (void)getValue:(void *)value
//返回描述所包装数据类型的字符串
- (const char *)objType
- (Bool)isEqualToValue:(NSValue *)value

3、NSNull:
集合中是不允许放nil值,因为nil在集合中有特殊意义,但是有时候确实需要存储一个表示“什么都没有”的价值,那么就可以使用NSNull,它是NSObject的一个子类

NSNull *n = [NSNull null];//是单例的,只能返回一个单例对象
NSNull *n1 = [NSNull null];//
NSNull *n2 = [NSNull null];//
这三个指针变量指向同一个变量

4、NSDate:
格式化:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";

date->string
NSDate *date = [NSDate date];
NSString *str = [NSString stringFromDate:date];

string->date
NSDate *date = [formatter dateFromString:@"2013-08-01 09:30:40"];

测试demo如下:

#import <Foundation/Foundation.h>
void value(){
    CGPoint  point = CGPointMake(10, 11);
    //结构体包装成一个对象
    NSValue *value = [NSValue valueWithPoint:point];
    //添加value
    NSMutableArray *array = [NSMutableArray array];
    [array addObject:value];
   
    //取出当时放进去的value
    NSValue *value1 = [array lastObject];
    CGPoint point1 = [value1 pointValue];
   
    BOOL reslut = CGPointEqualToPoint(point1, point);
    NSLog(@"result=%i",reslut);
}

typedef struct {
    int year;
    int month;
    int day;
} Date;

void value2(){
    Date date = {2013,07,30};
    //void *  :任何类型的指针
    //传结构体的地址
    //根据结构体类型 生成对应的类型描述字符串
    char *type = @encode(Date);
    NSValue *value = [NSValue value:&date withObjCType:type];
    //定义一个结构体变量
    Date date1 ;
   
    //取出包装好的结构体
    [value getValue:&date1];
   
    NSLog(@"year=%i, month=%i, day=%i", date1.year, date.month, date.day);
}

void dateCreate(){
    NSDate *date = [NSDate date];
    NSLog(@"date=%@",date);
    //当前时间+20秒
    date = [NSDate dateWithTimeIntervalSinceNow:20];
    NSLog(@"date+20=%@",date);
    //随即返回一个比较遥远的未来时间
    date = [NSDate distantFuture];
    NSLog(@"distantFuture=%@",date);
   
}
void dateUse(){
    NSDate *date = [NSDate date];
    //从190开始 到现在走过的毫秒数
    NSTimeInterval interval =[date timeIntervalSince1970];
    NSLog(@"interval=%f",interval);
    NSDate *date2 = [NSDate date];
    [date earlierDate:date2];
    [date laterDate:date2];
}

void dateFormat(){
    NSDate *date = [NSDate date];
    NSDateFormatter *formater = [[NSDateFormatter alloc] init];
    formater.dateFormat = @"yyyy-MM-dd hh:mm:ss";
    NSString *str = [formater stringFromDate:date];
    NSLog(@"%@",str);
    [formater release];
   
}

int main(int argc, const char * argv[])
{
    @autoreleasepool {       
        value();
        NSLog(@"----value2-----");
        value2();
        NSLog(@"----dateCreate-----");
        dateCreate();
        NSLog(@"----dateUse------");
        dateUse();
        NSLog(@"----dateFormat----");
        dateFormat();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值