Foundation框架: 10.NSNumber和NSValue的基本认识和运用

前面我们学完了Foundation框架里面三大集合类, 以后在开发的过程中, 我们就可以非常方便的存储我们想要的各种数据, 但前面我也讲过了, 三大集合类都不可以存放基本数据类型, 这让我们很头疼, 如果我必须得存一些基本数据类型, 那么怎么办呢? 其实在OC中是有这么一个非常好用的类, 可以存储我们的基本数据类型, 它就是NSNumber, 下面让我们一起来看看怎么运用吧:


PS:由于NSNumber的存储方法太多, 这里只选择某几个来演示.





例子:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSNumber *num = [NSNumber numberWithInt:10];
    
    int a = [num intValue];
    
    NSLog(@"%d", a);
    
    return 0;
}

打印出来的结果:

2015-02-06 14:58:39.232 10.NSNumber[4733:303] 10

在上面, 我们利用NSNumber的方法把int 类型10存入到了num中, 然后再利用NSNumber的对象方法, 把这个值取出来赋给int类型a, 打印出来的结果就是10.





当然, 这个也可以运用到NSDictionaryNSArray中, 比如:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSNumber *num = [NSNumber numberWithInt:100];
    
    NSArray *ary = @[@"number", num];
    
    NSLog(@"%@", ary);
    
    return 0;
}

打印出来的结果:

2015-02-06 15:04:09.320 10.NSNumber[4759:303] (
    number,
    100
)


#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSNumber *num = [NSNumber numberWithInt:20];
    
    NSDictionary *dic = @{@"age" : num, @"name" : @"rose"};
    
    NSLog(@"%@", dic);
    
    return 0;
}

打印出来的结果:

2015-02-06 15:05:37.185 10.NSNumber[4768:303] {
    age = 20;
    name = rose;
}




回到这里, 肯定有人会想到, 前面的NSArrayNSDictionary都有简便的创建方法, 那么NSNumber有没有呢, 其实答案是肯定的, 这又是一个Xcode的特性, 又是编译器帮我们干的好事, 下面来看看:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSDictionary *dic = @{@"age" : @20, @"name" : @"rose"};
    
    NSLog(@"%@", dic);
    
    return 0;
}

打印出来的结果:

2015-02-06 15:15:35.543 10.NSNumber[4786:303] {
    age = 20;
    name = rose;
}

只要在基本数据类型前面加哥@符号, 就可以把NSNumber的一大串垃圾代码通通扫掉, Xcode会帮我们自动生成.




那么为什么NSNumber可以包装基本数据类型呢? 其实NSNumber继承与一个叫做NSValue的一个类, 而这个类就是用来包装非OC对象类型用的, 比如基本数据类型, 结构体, 枚举等等, 下面让我们来看看:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSValue *va = [NSValue valueWithPoint:CGPointMake(10, 20)];
    
    NSArray *ary = @[va];
    
    NSDictionary *dic = @{@"point" : va};
    
    NSLog(@"ary = %@, dic = %@", ary, dic);
    
    return 0;
}

打印出来的结果:

2015-02-06 15:35:40.221 11.NSValue[4831:303] ary = (
    "NSPoint: {10, 20}"
), dic = {
    point = "NSPoint: {10, 20}";
}





由于方法太多, 这里就不一一介绍了, 大家可以回去慢慢尝试, 好了, 这次就讲到这里, 下次我们继续~~~

posted @ 2015-02-06 16:20  背着吉他去流浪  阅读(251)  评论(0编辑  收藏  举报