1、NSNumber

这个类主要是用来封装基本类型的,说到这里,就不得不说一下了:

OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗。。

注:那为什么基本类型不能存入到集合中呢?

原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有方法的。

从这一点上我们就可以看出NSNumber是很重要的,后面一定会经常用到。

  1. //
  2. //  main.m
  3. //  21_NSNumber
  4. //
  5. //  Created by jiangwei on 14-10-12.
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. //包装基本数据类型
  10. int main(int argc, const charchar * argv[]) {
  11. @autoreleasepool {
  12. //1.----------------创建NSNumber
  13. //封包
  14. NSNumber *intNumber = [NSNumber numberWithInt:3];
  15. NSNumber *floatNumber = [NSNumber numberWithFloat:9.8f];
  16. NSArray *array = @[intNumber,floatNumber];
  17. //解包
  18. int value = [intNumber intValue];
  19. float values = [floatNumber floatValue];
  20. NSString *str = [intNumber stringValue];
  21. //优化语法
  22. NSNumber *intNumbers = @12;
  23. //如何将结构体存入到数组中
  24. //使用NSValue对结构体进行封装
  25. //NSValue是NSNumber的父类
  26. //封包
  27. NSRange rang = {1,3};
  28. NSValue *v = [NSValue valueWithRange:rang];
  29. //解包
  30. rang = [v rangeValue];
  31. //对自定义的结构体进行封包
  32. struct WXPoint{
  33. float x;
  34. float y;
  35. };
  36. struct WXPoint p = {50,100};
  37. //第一个参数是结构体的变量地址,第二个参数是类型
  38. NSValue *v1 = [NSValue value:&p withObjCType:@encode(struct WXPoint)];
  39. //解包
  40. struct WXPoint p1;
  41. [v1 getValue:&p1];
  42. //NSNULL的使用
  43. //数组中是没有办法存放一个空对象的nil
  44. //NSArray *nilArray = @[nil,nil,nil];//报错的
  45. //有时候我们需要在数组中存入一个空对象的需求
  46. NSNull *n1 = [NSNull null];
  47. NSNull *n2 = [NSNull null];
  48. NSArray *nullArray = @[n1,n2];
  49. NSLog(@"nullArray =%@",nullArray);
  50. }
  51. return 0;
  52. }

 

1、封包和解包

  1. //1.----------------创建NSNumber
  2. //封包
  3. NSNumber *intNumber = [NSNumber numberWithInt:3];
  4. NSNumber *floatNumber = [NSNumber numberWithFloat:9.8f];
  5. NSArray *array = @[intNumber,floatNumber];
  6. //解包
  7. int value = [intNumber intValue];
  8. float values = [floatNumber floatValue];
  9. NSString *str = [intNumber stringValue];

NSNumber类中有基本类型对应的方法,可以这么操作的,不过值得一提的是:

  1. NSString *str = [intNumber stringValue];
  2. NSLog(@"%@",str);

我们看到,intNumber是用包装int类型的,但是我们可以使用stringValue方法进行解包,这个就相当于int类型转化成NSString类型了,这个需要注意了,同样反过来也是可以的。

运行结果:

2、优化创建方式

  1. //优化语法
  2. NSNumber *intNumbers = @12;

貌似和创建字符串方式很类似。

3、结构体类型的自动封包和解包

  1. //如何将结构体存入到数组中
  2. //使用NSValue对结构体进行封装
  3. //NSValue是NSNumber的父类
  4. //封包
  5. NSRange rang = {1,3};
  6. NSValue *v = [NSValue valueWithRange:rang];
  7. //解包
  8. rang = [v rangeValue];

在OC中还有一个结构体类型,他也是不能直接存入到集合类中的,对他进行封装的时NSValue类,不是NSNumber类了。

4、对自定义结构体类型进行自动封包和解包

  1. //对自定义的结构体进行封包
  2. struct WXPoint{
  3. float x;
  4. float y;
  5. };
  6. struct WXPoint p = {50,100};
  7. //第一个参数是结构体的变量地址,第二个参数是类型
  8. NSValue *v1 = [NSValue value:&p withObjCType:@encode(struct WXPoint)];
  9. //解包
  10. struct WXPoint p1;
  11. [v1 getValue:&p1];

对于自定义的结构体类型,我们在封包的时候需要使用value:withObjCType:方法来进行操作了,需要使用@encode(struct WXPoint)传递进去,这个作用就是相当于把结构体类型传递过去。

记住:在对自定义结构体类型进行封包的时候需要传递结构体类型

5、对空值进行封装

  1. //NSNULL的使用
  2. //数组中是没有办法存放一个空对象的nil
  3. //NSArray *nilArray = @[nil,nil,nil];//报错的
  4. //有时候我们需要在数组中存入一个空对象的需求
  5. NSNull *n1 = [NSNull null];
  6. NSNull *n2 = [NSNull null];
  7. NSArray *nullArray = @[n1,n2];
  8. NSLog(@"nullArray =%@",nullArray);

首先我们要了解一下,为什么会有这么需求:需要将空值存入到集合中,我们后面会说到具体的应用

那么这里需要使用NSNull来进行封包和解包

二、NSDate

这个类是OC中操作日期的类,他的用处也是很多的,后面会说到定时器,就会用到这个类

  1. //
  2. //  main.m
  3. //  22_NSDate
  4. //
  5. //  Created by jiangwei on 14-10-12.
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. int main(int argc, const charchar * argv[]) {
  10. @autoreleasepool {
  11. //1.----------------创建日期
  12. NSDate *date = [NSDate date];//代表当前的时间点
  13. NSDate *date1 = [[NSDate alloc] init];
  14. NSLog(@"%@",date);
  15. date1 = [NSDate dateWithTimeIntervalSinceNow:1000];//单位是秒,在当前时间加上1000s,如果是减去一个时间,直接使用负值就可以了
  16. NSLog(@"%@",date);
  17. //时间戳:某个日期到1970年之间的一个差值,这个值是很大的
  18. NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:1000];//参数为时间戳的大小
  19. //创建一个日期,然后拿到时间戳
  20. NSDate *now = [NSDate date];
  21. NSTimeInterval interval = [now timeIntervalSince1970];
  22. interval = [now timeIntervalSinceNow];//到当前时间的一个差值
  23. //日期的比较
  24. //通过调用日期对象的compare,或者通过两个日期之间的差值判断
  25. NSComparisonResult result = [date compare:date1];
  26. if(result == NSOrderedAscending){
  27. //大于
  28. }else if(result == NSOrderedDescending){
  29. //小于
  30. }else{
  31. //等于
  32. }
  33. //日期格式化
  34. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  35. [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  36. NSString *str = [dateFormatter stringFromDate:date];
  37. NSLog(@"%@",str);
  38. //设置时区
  39. NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
  40. [dateFormatter setTimeZone:timeZone];
  41. //下面的方法是从格林时区开始添加和减去一个时区值(格林时区为0)
  42. //[NSTimeZone timeZoneForSecondsFromGMT:0];
  43. //通过打印可以得到具体的时区
  44. NSArray *array = [NSTimeZone knownTimeZoneNames];//获取所有的时区
  45. for(NSString *str in array){
  46. NSLog(@"%@",str);
  47. }
  48. //将字符串转化成日期对象
  49. NSString *strs = @"2013年12月14日 16:31:08";
  50. [dateFormatter setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];
  51. date1 = [dateFormatter dateFromString:strs];
  52. }
  53. return 0;
  54. }

1、创建一个日期

默认是当前时间

  1. //1.----------------创建日期
  2. NSDate *date = [NSDate date];//代表当前的时间点
  3. NSDate *date1 = [[NSDate alloc] init];
  4. NSLog(@"%@",date);

2、增减时间点

  1. date1 = [NSDate dateWithTimeIntervalSinceNow:1000];//单位是秒,在当前时间加上1000s,如果是减去一个时间,直接使用负值就可以了
  2. NSLog(@"%@",date);

方法是一个,如果是减去时间点的话,直接用负值

3、从1970年开始到现在的时间戳

  1. //时间戳:某个日期到1970年之间的一个差值,这个值是很大的
  2. NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:1000];//参数为时间戳的大小

计算机中有一个特别的时间:1970年,这个是时间戳的开始点,系统时钟都是相对于这个时间点来计算的。

4、创建一个日期,然后获取他的时间戳

  1. //创建一个日期,然后拿到时间戳
  2. NSDate *now = [NSDate date];
  3. NSTimeInterval interval = [now timeIntervalSince1970];
  4. interval = [now timeIntervalSinceNow];//到当前时间的一个差值

这个时间戳就是和1970年相比,比他早多少个值,这就是俗称的时间戳

5、日期的比较

  1. //日期的比较
  2. //通过调用日期对象的compare,或者通过两个日期之间的差值判断
  3. NSComparisonResult result = [date compare:date1];
  4. if(result == NSOrderedAscending){
  5. //大于
  6. }else if(result == NSOrderedDescending){
  7. //小于
  8. }else{
  9. //等于
  10. }

6、日期的格式化(日期转化成字符串)

  1. //日期格式化
  2. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  3. [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  4. NSString *str = [dateFormatter stringFromDate:date];
  5. NSLog(@"%@",str);

7、设置时区

  1. //设置时区
  2. NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
  3. [dateFormatter setTimeZone:timeZone];

但是我们看到这个时区值我们该怎么获取呢?不可能死记硬背呀?这里,我们可以打印一个值:

  1. //下面的方法是从格林时区开始添加和减去一个时区值(格林时区为0)
  2. //[NSTimeZone timeZoneForSecondsFromGMT:0];
  3. //通过打印可以得到具体的时区
  4. NSArray *array = [NSTimeZone knownTimeZoneNames];//获取所有的时区
  5. for(NSString *str in array){
  6. NSLog(@"%@",str);
  7. }

这样我们就可以获取具体的时区值了:

8、将字符串转化成日期

  1. //将字符串转化成日期对象
  2. NSString *strs = @"2013年12月14日 16:31:08";
  3. [dateFormatter setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];
  4. date1 = [dateFormatter dateFromString:strs];

三、NSException

这个类和Java中的Exception类一样,用于捕获异常的,增加程序的健壮性,用法很简单,如下:

  1. //
  2. //  main.m
  3. //  23_Exception
  4. //
  5. //  Created by jiangwei on 14-10-12.
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. int main(int argc, const charchar * argv[]) {
  10. @autoreleasepool {
  11. //捕获异常
  12. @try {
  13. int a = 1/0;
  14. }
  15. @catch (NSException *exception) {
  16. }
  17. @finally {
  18. }
  19. }
  20. return 0;
  21. }

总结

这一篇就介绍了Foundation框架中的三个常用的类:NSNumber/NSDate/NSException,那么到这里我们对Foundation中的类的解读也算是告一段落了,其实Foundation中还有其他类,后面会用到,用多了自然就知道他怎么用的了。

OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)的更多相关文章

  1. (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

    前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java ...

  2. (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

    昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类, ...

  3. (转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

    在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray ...

  4. OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

    我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArr ...

  5. OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

    昨天学习了Foundation框架中NSArray类和NSMutableArray类:http://blog.csdn.net/jiangwei0910410003/article/details/4 ...

  6. OC学习篇之---Foundation框架中的NSDictionary类以及NSMutableDictionary类

    今天来看一下Foundation框架中的NSDictionary类,NSMutableDictionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和 ...

  7. (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

    在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...

  8. (转载)OC学习篇之---Foundation框架中的NSObject对象

    前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套a ...

  9. OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

    今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutabl ...

随机推荐

  1. VS书签的应用

    为某一行添加书签,方便快速定位. 添加书签, 查找上一个书签, 查找下一个书签, 清空所有书签. 有意思.

  2. Android 学习笔记之Bitmap位图的旋转

    位图的旋转也可以借助Matrix或者Canvas来实现. 通过postRotate方法设置旋转角度,然后用createBitmap方法创建一个经过旋转处理的Bitmap对象,最后用drawBitmap ...

  3. Onvif开发之客户端搜索篇

    关于ONVIF的广播,有客户端搜索和服务端发现的区别:客户端向固定的网段和固定的端口发送广播消息,服务端在对应的端口回复广播请求消息本文首先介绍客户端如何进行广播的已经对广播回复的信息的基本处理. 客 ...

  4. vue 打包成 apk 文件(修改路径)

    第一个坑:文件引用路径 现在项目我们什么都没动,是初始化之后直接打包的状态,打开dist/index.htmnl文件整个网页都是一片空白的. 爬坑: 打开 config文件夹/index.js文件 a ...

  5. Vue项目自动转换 px 为 rem,高保真还原设计图

    技术栈 vue-cli:使用脚手架工具创建项目. postcss-pxtorem:转换px为rem的插件. 自动设置根节点html的font-size 因为rem单位是相对于根节点的字体大小的,所以通 ...

  6. java使double保留两位小数的多方法

    java使double保留两位小数的多方法 java保留两位小数 mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat ...

  7. 分享js寄生组合模式继承

    function person(){ this.name = 'taobao'; this.showMess = function(){ return this.name; } } person.pr ...

  8. 如何优雅的写UI——(3)添加MFC选项卡

    窗体创建完成,接下来我们讲讲控件的使用 首先在CFormView窗体下选项卡的成员变量,这里我选择MFC下的选项卡类库:CMFCTabCtrl class CtabView : public CFor ...

  9. QQ亿级日活跃业务后台核心技术揭秘

    http://ms.csdn.net/geek/75478 引言 作为本次技术开放日后台架构专场的出品人我今天给大家带来<构造高可靠海量用户服务-SNG数亿级日活跃业务后台核心技术揭秘>, ...

  10. C#打开SDE数据库的几种方式总结

    转自谢灿软件原文 C#打开SDE数据库的几种方式总结 1.通过指定连接属性参数打开数据库 /// <param name="server">数据库服务器名</pa ...