前一篇說到了Foundation框架中的NSDirctionary類:http://blog.csdn.net/jiangwei0910410003/article/details/41830179,這一一篇來看一下Foundation的其餘經常使用的類:NSNumber,NSDate,NSExceptionjava
注:其實按照Java中集合的思想,應該還有一個Set,是的,OC中有NSSet和NSMutableSet這兩個類的,可是,這裏我爲何不單獨介紹了呢?由於他的操做和NSArray是很是類似的,只是他和NSArray有一個區別就是他不能放重複數據,並且他也是無序的。其餘沒什麼了,因此就不單獨介紹了,並且NSSet在後面的開發過程當中用到的可能不是不少。數組
一、NSNumber框架
這個類主要是用來封裝基本類型的,說到這裏,就不得不說一下了:優化
OC中的集合是不容許存入基本類型的,因此NSNumber類就誕生了,須要將基本類型封裝一下,而後存進去,這個相似於Java中的自動裝箱和拆箱,Java中的集合其實也是不容許存入基本類型的,可是咱們任然看能夠那麼操做,就是由於有自動裝箱功能,若是你將Eclipse的JDK改爲5.0以前的,你看看還能操做嗎。。spa
注:那爲何基本類型不能存入到集合中呢?.net
緣由是在操做集合的時候會操做集合元素中的方法,可是基本類型是沒有方法的。code
從這一點上咱們就能夠看出NSNumber是很重要的,後面必定會常常用到。orm
// // 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 char * 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.----------------建立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類型了,這個須要注意了,一樣反過來也是能夠的。
運行結果:對象
二、優化建立方式blog
//優化語法 NSNumber *intNumbers = @12;貌似和建立字符串方式很相似。
三、結構體類型的自動封包和解包
//如何將結構體存入到數組中 //使用NSValue對結構體進行封裝 //NSValue是NSNumber的父類 //封包 NSRange rang = {1,3}; NSValue *v = [NSValue valueWithRange:rang]; //解包 rang = [v rangeValue];在OC中還有一個結構體類型,他也是不能直接存入到集合類中的,對他進行封裝的時 NSValue類,不是NSNumber類了。
四、對自定義結構體類型進行自動封包和解包
//對自定義的結構體進行封包 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)傳遞進去,這個做用就是至關於把結構體類型傳遞過去。
記住:在對自定義結構體類型進行封包的時候須要傳遞結構體類型
五、對空值進行封裝
//NSNULL的使用 //數組中是沒有辦法存放一個空對象的nil //NSArray *nilArray = @[nil,nil,nil];//報錯的 //有時候咱們須要在數組中存入一個空對象的需求 NSNull *n1 = [NSNull null]; NSNull *n2 = [NSNull null]; NSArray *nullArray = @[n1,n2]; NSLog(@"nullArray =%@",nullArray);首先咱們要了解一下,爲何會有這麼需求:須要將空值存入到集合中,咱們後面會說到具體的應用
那麼這裏須要使用NSNull來進行封包和解包
2、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 char * 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.----------------建立日期 NSDate *date = [NSDate date];//表明當前的時間點 NSDate *date1 = [[NSDate alloc] init]; NSLog(@"%@",date);
date1 = [NSDate dateWithTimeIntervalSinceNow:1000];//單位是秒,在當前時間加上1000s,若是是減去一個時間,直接使用負值就能夠了 NSLog(@"%@",date);方法是一個,若是是減去時間點的話,直接用負值
三、從1970年開始到如今的時間戳
//時間戳:某個日期到1970年之間的一個差值,這個值是很大的 NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:1000];//參數爲時間戳的大小計算機中有一個特別的時間:1970年,這個是時間戳的開始點,系統時鐘都是相對於這個時間點來計算的。
四、建立一個日期,而後獲取他的時間戳
//建立一個日期,而後拿到時間戳 NSDate *now = [NSDate date]; NSTimeInterval interval = [now timeIntervalSince1970]; interval = [now timeIntervalSinceNow];//到當前時間的一個差值這個時間戳就是和1970年相比,比他早多少個值,這就是俗稱的時間戳
五、日期的比較
//日期的比較 //經過調用日期對象的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];
3、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 char * argv[]) { @autoreleasepool { //捕獲異常 @try { int a = 1/0; } @catch (NSException *exception) { } @finally { } } return 0; }
這一篇就介紹了Foundation框架中的三個經常使用的類:NSNumber/NSDate/NSException,那麼到這裏咱們對Foundation中的類的解讀也算是告一段落了,其實Foundation中還有其餘類,後面會用到,用多了天然就知道他怎麼用的了。