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;
}
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;
}
相关文章推荐
- Foundation框架—NSNumber、NSValue、NSDate
- OC学习笔记之Foundation框架NSNumber、NSValue和NSDate
- Foundation框架NSNumber、NSValue和NSDate
- Objective-C: Foundation——NSString、NSMutableString、NSNumber、NSValue、NSDate
- OC——Foundation—常用的类(4)——NSNumber、NSValue、NSNull、NSDate
- OC学习笔记之Foundation框架NSNumber、NSValue和NSDate(转)
- 黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate
- Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver
- 黑马程序员---Foundation常用类(NSNumber、NSValue、NSDate)
- Objective-C Foundation框架实践——NSNumber(一)
- 黑马程序员-OC学习笔记-----Foundation框架(集合、NSNumber、NSDate)
- 黑马程序员- IOS学习笔记-Foundation框架集合类、NSNumber、NSDate
- Objective-C边学边记-10:Foundation Kit快速教程之 各种数值(NSNumber,NSValue,NSNull
- OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
- Objective-C( Foundation框架 一 NSNumber(NSValue))
- Foundation框架下的常用类(NSNumber, NSValue, NSDate,NSDateFormatter)
- 黑马程序员—Foundation框架之NSFileManager、NSNumber与NSDate
- 【Foundation】19-NSNumber、NSValue和NSDate
- Objective-C之foundation框架中的NSString的使用方法、指针基本用法、读取本地和远程文件
- OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)