关于NSNumber & NSValue的方法知识简单了解

简单分享下,希望大牛们多多指点迷津,逐步修改,完善不足支持。借鉴之处,还请谅解

 

#import <Foundation/Foundation.h>

 

typedef struct{             //C-结构体

    int year;

    int month;

    int day;

}Date;

 

void text(){

    Date mydate;                //定义一个结构体变量

    Date date={2016,8,20};

    

    char *type=@encode(Date);   //根据结构体类型生成 对应的 类型描述字符串

            //void* 代表任何指针。这里要传结构体的地址&date

    NSValue *val=[NSValue value:&date withObjCType:type];

//    [val objCType];     //取出类型描述字符串

    

    [val getValue:&mydate];        //取出包装好的结构体

    NSLog(@"%i-%i-%i",mydate.year,mydate.month,mydate.day);   //.表示访问成员

}

 

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

    @autoreleasepool {

        

#pragma mark NSNumber常用方法

        //只能包装数字,不能包装结构体,不支持包装的自动解包

        NSNumber *num=[NSNumber numberWithInt:10];

               //将int类型10 包装给一个NSNumber对象

        NSMutableArray *array=[NSMutableArray array];

        [array addObject:num];    //添加数值到数组中

        NSNumber *num1=[array lastObject];

               //取出的还是一个NSNumber对象,不支持自动解包

        int number=[num1 intValue];   //将NSNumber转化成int类型

        num=@12;        //快速包装数字对象

        

#pragma mark NSValue常用方法

        //包装类,NSValue是NSNumber的父类,可以包装任意值

        CGPoint point=CGPointMake(10, 10);

        NSValue *value=[NSValue valueWithPoint:point];

        //将结构体包装成一个对象

        [array addObject:value];    //添加value

        NSValue *v1=[array lastObject];

        CGPoint p1=[v1 pointValue];  //取出放入的value

        BOOL re=CGPointEqualToPoint(point, p1);   //判断比较

        NSValue *v2=@'a';       //快速包装字符,打印出anscii码:97

         text();

    }

    return 0;

}

 

posted @ 2016-05-22 09:24  Miracle_H  阅读(264)  评论(0编辑  收藏  举报