NSNumber、NSValue、NSNull

NSNumber是用来包装基本数据类型

包装

其实在创建NSNumber的时候,我们就是已经将基本数据类型包装起来了

        NSNumber *intNumber = [NSNumber numberWithInt:1];
        NSNumber *longNumber = [NSNumber numberWithLong:100000];
        NSNumber *floatNumber = [NSNumber numberWithFloat:10.5];
        NSNumber *boolNumber = [NSNumber numberWithBool:true];
        NSNumber *charNumber = [NSNumber numberWithChar:'A'];
        .........
        NSArray *array = @[intNumber ,longNumber,floatNumber,boolNumber,charNumber];
        NSLog(@"%@",array);

解包装

        NSInteger intValue = [intNumber intValue];
        float floatValue = [floatNumber floatValue];
        ......
NSNumber简便的语法
        NSNumber *intNumber1 = @12;
        NSNumber *floatNumber1= @3.14;
        NSNumber *charNumber1 = @'a';
        NSNumber *boolNumber1 = @YES;
        ......
NSValue

NSValue是NSNumber的父类 可以对稍微复杂一些的结构体进行封包 但是其在项目开发过程当中并不是很常见
例如我们自定义一个结构体并把它进行包装/解包装

        NSRange range = {3, 10};
        NSValue *value = [NSValue valueWithRange:range];
       ......

除此之外NSValue一些常见的用法:


解包装

        NSRange range1 = [value rangeValue];
        CGPoint point = [value pointValue];
        CGRect rect = [value rectValue];
        ......
自定义结构体包装/解包装

很明显我们利用NSValue可以对一些结构体对象进行包装/解包装,但是我们自定义的结构体怎么办呢?
不要紧张,对自定义的结构体的封包和解包也有其用法:
例如:

        struct WHPoint {
            float x;
            float y;
        };
        struct WHPoint p = {5 , 10};
        
        NSValue *pointValue = [NSValue value:&p withObjCType:@encode(struct WHPoint)];

解包

        struct WHPoint p2;
        [pointValue getValue:&p2];
NSNull

NSNull 是空的意思

       NSNull *null = [NSNull null]; 创建一个空的对象

我们可以看到NSNull 只有一个类方法,除此之外并没有什么特殊的用法和属性

#import <Foundation/NSObject.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSNull : NSObject <NSCopying, NSSecureCoding>

+ (NSNull *)null;

@end
NS_ASSUME_NONNULL_END

假设我们创建一个数组 可以往数组里面存储空的对像

       NSArray *array = @[@"张三",null,@"王五"];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 Foundation中的:NSNumber,NSDate,N...
    LeaderBiao阅读 366评论 0 1
  • 一、深复制和浅复制的区别? 1、浅复制:只是复制了指向对象的指针,即两个指针指向同一块内存单元!而不复制指向对象的...
    iOS_Alex阅读 1,463评论 1 27
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,852评论 0 9
  • 主诉:写作业无从下笔并交作业困难7天。 现病史:明天007又到作业雨时间,患者慌忙提笔写作业,写了删,删了写。近日...
    刘洪君V阅读 852评论 7 5
  • 时光荏苒,岁月如梭。不知不觉中十三年的时光转瞬即逝,你已从怀抱婴儿变成了青春少年,回首十三年时光,心中有话对你说:...
    童话里的浪漫阅读 561评论 1 3