OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
1、NSNumber
这个类主要是用来封装基本类型的,说到这里,就不得不说一下了:
OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗。。
注:那为什么基本类型不能存入到集合中呢?
原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有方法的。
从这一点上我们就可以看出NSNumber是很重要的,后面一定会经常用到。
- //
- // main.m
- // 21_NSNumber
- //
- // Created by jiangwei on 14-10-12.
- // Copyright (c) 2014年 jiangwei. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- //包装基本数据类型
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
- //1.----------------创建NSNumber
- //封包
- 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;
- //如何将结构体存入到数组中
- //使用NSValue对结构体进行封装
- //NSValue是NSNumber的父类
- //封包
- 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的使用
- //数组中是没有办法存放一个空对象的nil
- //NSArray *nilArray = @[nil,nil,nil];//报错的
- //有时候我们需要在数组中存入一个空对象的需求
- NSNull *n1 = [NSNull null];
- NSNull *n2 = [NSNull null];
- NSArray *nullArray = @[n1,n2];
- NSLog(@"nullArray =%@",nullArray);
- }
- return 0;
- }
1、封包和解包
- //1.----------------创建NSNumber
- //封包
- 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、结构体类型的自动封包和解包
- //如何将结构体存入到数组中
- //使用NSValue对结构体进行封装
- //NSValue是NSNumber的父类
- //封包
- 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的使用
- //数组中是没有办法存放一个空对象的nil
- //NSArray *nilArray = @[nil,nil,nil];//报错的
- //有时候我们需要在数组中存入一个空对象的需求
- NSNull *n1 = [NSNull null];
- NSNull *n2 = [NSNull null];
- NSArray *nullArray = @[n1,n2];
- NSLog(@"nullArray =%@",nullArray);
首先我们要了解一下,为什么会有这么需求:需要将空值存入到集合中,我们后面会说到具体的应用
那么这里需要使用NSNull来进行封包和解包
二、NSDate
这个类是OC中操作日期的类,他的用处也是很多的,后面会说到定时器,就会用到这个类
- //
- // main.m
- // 22_NSDate
- //
- // Created by jiangwei on 14-10-12.
- // Copyright (c) 2014年 jiangwei. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
- //1.----------------创建日期
- NSDate *date = [NSDate date];//代表当前的时间点
- NSDate *date1 = [[NSDate alloc] init];
- NSLog(@"%@",date);
- date1 = [NSDate dateWithTimeIntervalSinceNow:1000];//单位是秒,在当前时间加上1000s,如果是减去一个时间,直接使用负值就可以了
- NSLog(@"%@",date);
- //时间戳:某个日期到1970年之间的一个差值,这个值是很大的
- NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:1000];//参数为时间戳的大小
- //创建一个日期,然后拿到时间戳
- NSDate *now = [NSDate date];
- NSTimeInterval interval = [now timeIntervalSince1970];
- interval = [now timeIntervalSinceNow];//到当前时间的一个差值
- //日期的比较
- //通过调用日期对象的compare,或者通过两个日期之间的差值判断
- 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];
- //下面的方法是从格林时区开始添加和减去一个时区值(格林时区为0)
- //[NSTimeZone timeZoneForSecondsFromGMT:0];
- //通过打印可以得到具体的时区
- 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、创建一个日期
默认是当前时间
- //1.----------------创建日期
- NSDate *date = [NSDate date];//代表当前的时间点
- NSDate *date1 = [[NSDate alloc] init];
- NSLog(@"%@",date);
2、增减时间点
- date1 = [NSDate dateWithTimeIntervalSinceNow:1000];//单位是秒,在当前时间加上1000s,如果是减去一个时间,直接使用负值就可以了
- NSLog(@"%@",date);
方法是一个,如果是减去时间点的话,直接用负值
3、从1970年开始到现在的时间戳
- //时间戳:某个日期到1970年之间的一个差值,这个值是很大的
- NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:1000];//参数为时间戳的大小
计算机中有一个特别的时间:1970年,这个是时间戳的开始点,系统时钟都是相对于这个时间点来计算的。
4、创建一个日期,然后获取他的时间戳
- //创建一个日期,然后拿到时间戳
- NSDate *now = [NSDate date];
- NSTimeInterval interval = [now timeIntervalSince1970];
- interval = [now timeIntervalSinceNow];//到当前时间的一个差值
这个时间戳就是和1970年相比,比他早多少个值,这就是俗称的时间戳
5、日期的比较
- //日期的比较
- //通过调用日期对象的compare,或者通过两个日期之间的差值判断
- 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];
但是我们看到这个时区值我们该怎么获取呢?不可能死记硬背呀?这里,我们可以打印一个值:
- //下面的方法是从格林时区开始添加和减去一个时区值(格林时区为0)
- //[NSTimeZone timeZoneForSecondsFromGMT:0];
- //通过打印可以得到具体的时区
- 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类一样,用于捕获异常的,增加程序的健壮性,用法很简单,如下:
- //
- // main.m
- // 23_Exception
- //
- // Created by jiangwei on 14-10-12.
- // Copyright (c) 2014年 jiangwei. All rights reserved.
- //
- #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)的更多相关文章
- (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java ...
- (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类, ...
- (转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类
在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray ...
- OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类
我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArr ...
- OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
昨天学习了Foundation框架中NSArray类和NSMutableArray类:http://blog.csdn.net/jiangwei0910410003/article/details/4 ...
- OC学习篇之---Foundation框架中的NSDictionary类以及NSMutableDictionary类
今天来看一下Foundation框架中的NSDictionary类,NSMutableDictionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和 ...
- (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...
- (转载)OC学习篇之---Foundation框架中的NSObject对象
前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套a ...
- OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutabl ...
随机推荐
- XML与JSON的区别?各自有哪些优缺点?
JSON和XML都是数据传输格式,它们有哪些区别,又都有些什么优缺点呢?零度带领大家来分析分析. 一.先来看看两者的定义 1.XML的定义 扩展标记语言 (Extensible Markup Lang ...
- js--基于面向对象的组件开发及案例
组件的开发:多组对象之间想兄弟关系一样,代码复用的形式. 问题:1).参数不写会报错:利用对象复制————配置参数和默认惨啊书的覆盖关系(逻辑或也可以)2).参数特别多时会出现顺序问题:json解决 ...
- 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody
简介 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请 ...
- Install Docker Mac OS X
检查 Mac OS version 要求必须是 OS X 10.6 Snow Leopard or newer to run Boot2Docker 安装 Boot2Docker 列表内容 下载地址: ...
- 论Node在构建超媒体API中的作用
论Node在构建超媒体API中的作用 作者:chszs,转载需注明. 博客主页:http://blog.csdn.net/chszs 超媒体即Hypermedia,是一种採用非线性网状结构对块状多媒体 ...
- 构建自己的AngularJS - 作用域和Digest(一)
作用域 第一章 作用域和Digest(一) Angular作用域是简单javascript对象,因此你能够像对其它对象一样加入属性.然而,他们也有一些额外的功能:用于观測数据结构的变化.这样的观察能力 ...
- LinearLayout-margin不起作用的处理
1.如果LinearLayout中使用android:layout_marginRight不起作用,通过测试原来在android2.x中,如果一个控件中有android:layout_gravity属 ...
- Android之Socket的基于UDP传输
接收方创建步骤: 1. 创建一个DatagramSocket对象,并指定监听的端口号 DatagramSocket socket = new DatagramSocket (4567); 2. 创 ...
- Android 安卓直播开源: RTMP 推流SDK
前些日子在github上提交了基于GPUImage的iOS直播推流SDK(https://github.com/runner365/GPUImageRtmpPush) 最近整理了Android直播推流 ...
- MySQL乱码问题以及utf8mb4字符集---utf8mb4和utf8有什么区别? emoji表情与utf8mb4
utf8mb4兼容utf8,且比utf8能表示更多的字符. 关于emoji表情的话mysql的utf8是不支持,需要修改设置为utf8mb4,才能支持, 因为utf8mb4是utf8的超集