标签:set har cat creat cep encode mdx 类型 from
1、NSNumber
这个类主要是用来封装基本类型的,说到这里,就不得不说一下了:
OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗。。
注:那为什么基本类型不能存入到集合中呢?
原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有方法的。
从这一点上我们就可以看出NSNumber是很重要的,后面一定会经常用到。
-
- #import <Foundation/Foundation.h>
-
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
-
-
- NSNumber *intNumber = [NSNumber numberWithInt:3];
- NSNumber *floatNumber = [NSNumber numberWithFloat:9.8f];
- NSArray *array = @[intNumber,floatNumber];
-
-
- int value = [intNumber intValue];
- float values = [floatNumber floatValue];
- NSString *str = [intNumber stringValue];
-
-
- NSNumber *intNumbers = @12;
-
-
-
-
-
-
- NSRange rang = {1,3};
- NSValue *v = [NSValue valueWithRange:rang];
-
-
- rang = [v rangeValue];
-
-
-
- struct WXPoint{
- float x;
- float y;
- };
-
- struct WXPoint p = {50,100};
-
- NSValue *v1 = [NSValue value:&p withObjCType:@encode(struct WXPoint)];
-
-
- struct WXPoint p1;
- [v1 getValue:&p1];
-
-
-
-
-
-
- NSNull *n1 = [NSNull null];
- NSNull *n2 = [NSNull null];
- NSArray *nullArray = @[n1,n2];
- NSLog(@"nullArray =%@",nullArray);
-
-
- }
- return 0;
- }
1、封包和解包
- NSNumber *intNumber = [NSNumber numberWithInt:3];
- NSNumber *floatNumber = [NSNumber numberWithFloat:9.8f];
- NSArray *array = @[intNumber,floatNumber];
-
- int value = [intNumber intValue];
- float values = [floatNumber floatValue];
- NSString *str = [intNumber stringValue];
NSNumber类中有基本类型对应的方法,可以这么操作的,不过值得一提的是:
- NSString *str = [intNumber stringValue];
- NSLog(@"%@",str);
我们看到,intNumber是用包装int类型的,但是我们可以使用stringValue方法进行解包,这个就相当于int类型转化成NSString类型了,这个需要注意了,同样反过来也是可以的。
运行结果:
2、优化创建方式
- NSNumber *intNumbers = @12;
貌似和创建字符串方式很类似。
3、结构体类型的自动封包和解包
- NSRange rang = {1,3};
- NSValue *v = [NSValue valueWithRange:rang];
-
- rang = [v rangeValue];
在OC中还有一个结构体类型,他也是不能直接存入到集合类中的,对他进行封装的时NSValue类,不是NSNumber类了。
4、对自定义结构体类型进行自动封包和解包
- struct WXPoint{
- float x;
- float y;
- };
-
- struct WXPoint p = {50,100};
- NSValue *v1 = [NSValue value:&p withObjCType:@encode(struct WXPoint)];
-
- struct WXPoint p1;
- [v1 getValue:&p1];
对于自定义的结构体类型,我们在封包的时候需要使用value:withObjCType:方法来进行操作了,需要使用@encode(struct WXPoint)传递进去,这个作用就是相当于把结构体类型传递过去。
记住:在对自定义结构体类型进行封包的时候需要传递结构体类型
5、对空值进行封装
- NSNull *n1 = [NSNull null];
- NSNull *n2 = [NSNull null];
- NSArray *nullArray = @[n1,n2];
- NSLog(@"nullArray =%@",nullArray);
首先我们要了解一下,为什么会有这么需求:需要将空值存入到集合中,我们后面会说到具体的应用
那么这里需要使用NSNull来进行封包和解包
二、NSDate
这个类是OC中操作日期的类,他的用处也是很多的,后面会说到定时器,就会用到这个类
-
- #import <Foundation/Foundation.h>
-
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
-
- NSDate *date = [NSDate date];
- NSDate *date1 = [[NSDate alloc] init];
- NSLog(@"%@",date);
-
- date1 = [NSDate dateWithTimeIntervalSinceNow:1000];
- NSLog(@"%@",date);
-
-
- NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:1000];
-
-
- NSDate *now = [NSDate date];
- NSTimeInterval interval = [now timeIntervalSince1970];
- interval = [now timeIntervalSinceNow];
-
-
-
- NSComparisonResult result = [date compare:date1];
- if(result == NSOrderedAscending){
-
- }else if(result == NSOrderedDescending){
-
- }else{
-
- }
-
-
-
- NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
- NSString *str = [dateFormatter stringFromDate:date];
- NSLog(@"%@",str);
-
-
-
- NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
- [dateFormatter setTimeZone:timeZone];
-
-
-
-
-
- NSArray *array = [NSTimeZone knownTimeZoneNames];
- for(NSString *str in array){
- NSLog(@"%@",str);
- }
-
-
-
- NSString *strs = @"2013年12月14日 16:31:08";
- [dateFormatter setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];
- date1 = [dateFormatter dateFromString:strs];
-
-
- }
- return 0;
- }
1、创建一个日期
默认是当前时间
- NSDate *date = [NSDate date];
- NSDate *date1 = [[NSDate alloc] init];
- NSLog(@"%@",date);
2、增减时间点
- date1 = [NSDate dateWithTimeIntervalSinceNow:1000];
- NSLog(@"%@",date);
方法是一个,如果是减去时间点的话,直接用负值
3、从1970年开始到现在的时间戳
- NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:1000];
计算机中有一个特别的时间:1970年,这个是时间戳的开始点,系统时钟都是相对于这个时间点来计算的。
4、创建一个日期,然后获取他的时间戳
- NSDate *now = [NSDate date];
- NSTimeInterval interval = [now timeIntervalSince1970];
- interval = [now timeIntervalSinceNow];
这个时间戳就是和1970年相比,比他早多少个值,这就是俗称的时间戳
5、日期的比较
- NSComparisonResult result = [date compare:date1];
- if(result == NSOrderedAscending){
-
- }else if(result == NSOrderedDescending){
-
- }else{
-
- }
6、日期的格式化(日期转化成字符串)
- NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
- NSString *str = [dateFormatter stringFromDate:date];
- NSLog(@"%@",str);
7、设置时区
- NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
- [dateFormatter setTimeZone:timeZone];
但是我们看到这个时区值我们该怎么获取呢?不可能死记硬背呀?这里,我们可以打印一个值:
-
- NSArray *array = [NSTimeZone knownTimeZoneNames];
- for(NSString *str in array){
- NSLog(@"%@",str);
- }
这样我们就可以获取具体的时区值了:
8、将字符串转化成日期
- NSString *strs = @"2013年12月14日 16:31:08";
- [dateFormatter setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];
- date1 = [dateFormatter dateFromString:strs];
三、NSException
这个类和Java中的Exception类一样,用于捕获异常的,增加程序的健壮性,用法很简单,如下:
-
- #import <Foundation/Foundation.h>
-
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
-
- @try {
- int a = 1/0;
- }
- @catch (NSException *exception) {
-
- }
- @finally {
-
- }
- }
- return 0;
- }
总结
这一篇就介绍了Foundation框架中的三个常用的类:NSNumber/NSDate/NSException,那么到这里我们对Foundation中的类的解读也算是告一段落了,其实Foundation中还有其他类,后面会用到,用多了自然就知道他怎么用的了。
OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
标签:set har cat creat cep encode mdx 类型 from
原文地址:http://www.cnblogs.com/dreamDeveloper/p/6024703.html