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

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

  • NSNumber 与NSValue

    NSNumber与NSValue关系与作用 NSNumber NSValue

  • NSValue的介绍和使用 - OC

    什么是NSValue? NSNumber是NSValue的子类, 但NSNumber只能包装数字类型 NSValu...

  • Foundation - NSNumber值对象

    NSNumber是NSValue的子类,但 NSNumber只能包装数字类型,NSValue可以包装任意值。也可以...

  • Objective-C基础学习之NSValue

    1.NSValue基本概念 NSNumber是NSValue的子类, 但NSNumber只能包装数字类型 NSVa...

  • Foundaton框架-->NSValue

    一、NSValue的基本概念 NSNumber是NSValue的子类,但NSNumber只能包装数字类型 NSVa...

  • NSValue (NSNumber)

    NSValue.h 中,一般用的不是很多, 注:注意多使用 NSNumber,而且用 @(int); 方法装箱! ...

  • NSNumber与NSInteger

    NSInteger、CGFloat是基本数据类型,而NSValue、NSNumber是包装类,NSValue是NS...

  • NSValue

    NSValue是NSNumber的父类结构体 指针 复合类型 使用NSValue来封装 int a[10]也可以...

  • iOS中的NSNumber与NSValue

    NSNumber(只能包装数字类型) NSValue(可以包装结构体)

网友评论

    本文标题:NSNumber、NSValue、NSNull

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