OC學習篇之---Foundation框架中的其餘類(NSNumber,NSDate,NSExcetion) 分類: IOS 2014-12-10 22:20 2451人閱讀 評論(0) 收藏

前一篇說到了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中還有其餘類,後面會用到,用多了天然就知道他怎麼用的了。

相關文章
相關標籤/搜索