NSNumber、NSValue、NSNull

作者: 见哥哥长高了 | 来源:发表于2016-11-26 17:06 被阅读90次

    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,@"王五"];
    

    相关文章

      网友评论

        本文标题:NSNumber、NSValue、NSNull

        本文链接:https://www.haomeiwen.com/subject/rmlgpttx.html