NSValue和NSNumber(OC的包装类)

在进行iOS开发时,可能遇到下方的三个类型:

>NSInteger  :大致等于long型整数

>NSUinteger:大致等于unsigned long;

>CGFloat: 在64位大致等于double  在32为大致等于float

我们不要被这3个类前面的NS  CG前缀迷惑了,他们并不是包装类,他们依然只是基本类型

NSValue和NSNumber都是包装类,其中NSValue是NSNumber的父类;NSValue代表一个更通用的包装类,它可以包装share  int  char  long  指针  对象id等数据,通过该包装类,就可以吧short  int  long  float  char 指针等添加到NSArray  NSSet等集合(这些集合要求他们的元素必须是对象)中。


NSNumber是更具体的包装类,以下三个方法:

>+numberWithXxx: :该类方法直接将特定类型的值包装成NSNumber

>-initWithXxx: :该实例方法需要创建一个NSNumber对象,在用一个基本数据类型的值来初始化NSNumber

>-XxxValue: 该实例方法返回该NSNumber对象封装的基本类型的值


//  Created by lyx on 16/2/14.
//  Copyright (c) 2016年 李云祥. All rights reserved.

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //调用类方法将int类型的值包装成NSNumber对象
        NSNumber *num = [NSNumber numberWithInt:10];
        //调用类方法将double类型的值包装成NSNumber对象
        NSNumber *de = [NSNumber numberWithDouble:3.4];
        NSLog(@"%d",[num intValue]);
        NSLog(@"%g",[de doubleValue]);
        //先创建NSNumber对象,再调用initWithXxx方法执行初始化
        NSNumber *ch = [[NSNumber alloc]initWithChar:'J'];
        //直接输出NSNumber对象,使用%@格式字符串
        NSLog(@"%@",ch);
    }
    return 0;
}

输出:

2016-02-14 22:11:58.943 NSValue和NSNumber[728:31361] 10
2016-02-14 22:11:58.944 NSValue和NSNumber[728:31361] 3.4
2016-02-14 22:11:58.945 NSValue和NSNumber[728:31361] 74
Program ended with exit code: 0

从上面的程序可以看出,将基本数据类型的值转换成包装类简单的做法就是调用numberWithXxx:类方法,调用该方法是传入一个基本类型的值,该方法就会返回包装该值得包装类实例。如果需要兄包装类实例中获取基本类型的值,调用xxxValue实例方法即可。


你可能感兴趣的:(appdelegate,包装)