zoukankan      html  css  js  c++  java
  • 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}";
    }
    





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

  • 相关阅读:
    Linux平台下卸载MySQL的方法
    Linux自带mariadb卸载
    ubuntu下mysql的安装
    Java基础-方法区以及static的内存分配图
    Linux新建用户后的必要设置
    vim 个性化设置和操作
    centos6 下查看SELinux状态 关闭SELinux
    查看CentOS版本信息
    Linux下 tar 命令详解
    linux下 利用 rz 命令上传文件
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282803.html
Copyright © 2011-2022 走看看