A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 956251361 中级黑马   /  2016-1-2 11:00  /  794 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


NSNumber是NSValue的子类,NSValue主要用来把指针,CGRect结构体包装成OC对象,以便存储.

一个NSValue对象是用来存储一个c或者Objective-c数据的简单容器.他可以保存任意类型的数据,比如int char ,float,pointers,structures ,和object ,ids,NSValue类的目标是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要那些元素是对象的数据结构,如NSArray或者NSSet的实例.需要注意的是NSValue的对象是不可以枚举的.
#import <Foundation/Foundation.h>

void test (){

    //创建一个结构体变量保存一个点
    //p1是CGPoint类型的结构体变量
    CGPoint p1 = CGPointMake(20, 50);
    NSRect r1 = NSMakeRect(0, 0, 100, 200);
    //创建数组
    NSMutableArray *arr = [NSMutableArray array];

    //把结构体变量p1装换成一个对象
    NSValue* pointVal = [NSValue valueWithPoint:p1];
    //把装换完成的对象加入到数组arr中
    [arr addObject:pointVal];

    //把结构体r1转换成一个对象
    NSValue *rectVal = [NSValue valueWithRect:r1];
    [arr addObject:rectVal];

    NSLog(@"arr = %@",arr);

    //在数组中取出r1的值
    NSValue *r1Val = [arr lastObject];
    NSRect r2 = [r1Val rectValue];

    NSLog(@"%@",NSStringFromRect(r2));

}

typedef struct D{

    int year;
    int month;
    int day;

}MyDate;//MaDate是D这个结构体的别名

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        //保存一个年月日
        //2015-5-7
        MyDate md = {2015,5,7};

        //结构体类型的变量md转换成对象
        //@encode(MyDate),作用,啊MyDate类型生成一个常量字符串描述
        NSValue *val = [NSValue valueWithBytes:&md objCType:@encode(MyDate)];

        //定义一个数组,把val存到数组中
        NSMutableArray *arr = [NSMutableArray arrayWithObjects:val, nil];

        //从数组中取出类NSValue对象
        MyDate tmd;
        //获取结构体值,保存到结构体变量tmd
        [val getValue:&tmd];

        //从对象中取出结构体变量的值

        NSLog(@"%d,%d,%d",tmd.year,tmd.month,tmd.day);

    }
    return 0;
}

2 个回复

倒序浏览
可以的!!!!
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马