黑马程序员技术交流社区

标题: NSValue的介绍和使用 [打印本页]

作者: 956251361    时间: 2016-1-2 11:00
标题: NSValue的介绍和使用

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;
}
作者: 13631297627    时间: 2016-1-30 16:20
可以的!!!!
作者: guyuexing    时间: 2016-1-30 23:57
谢谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2