您的位置:首页 > 移动开发 > Objective-C

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

2013-07-31 10:13 471 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐