zoukankan      html  css  js  c++  java
  • NSValue

    如何将非OC对象封装成OC对象,塞给数组等

     1 //
     2 //  main.m
     3 //  NSValue
     4 //
     5 //  Created by dingxiaowei on 13-5-17.
     6 //  Copyright (c) 2013年 dingxiaowei. All rights reserved.
     7 //
     8 
     9 #import <Foundation/Foundation.h>
    10 
    11 //创建NSValue
    12 void value(){
    13     //创建一个point结构体,这个不是OC对象
    14     CGPoint point=CGPointMake(10, 10);
    15     //将结构体变量包装成一个对象
    16     NSValue *value=[NSValue valueWithPoint:point];
    17     //创建一个数组
    18     NSMutableArray *array=[NSMutableArray array];
    19     //将包装好的value放入数组中
    20     [array addObject:value];  //添加这个对象的时候,做一次retain操作
    21 
    22     //取出这个对象
    23     value=[array lastObject];
    24     //将NSValue对象转化成CGPoint结构体
    25     CGPoint point2=[value pointValue];
    26     //比较验证(比较取出来的对象跟之前的对象是否相同)
    27     BOOL result = CGPointEqualToPoint(point2, point);
    28     if(result==1){
    29         NSLog(@"point=point2");
    30     }
    31     else{
    32         NSLog(@"point!=point2");
    33     }
    34     //直接打印输出结构体
    35     NSString *str=NSStringFromPoint(point2);
    36     NSLog(@"取出来的point是:%@",str);
    37 }
    38 
    39 //宏定义
    40 typedef struct {
    41     int year;
    42     int month;
    43     int day;
    44 } Date;
    45 //将自定义的结构体塞到数组中
    46 void value2(){
    47     Date date={2013,5,17};
    48     //NSLog(@"输入的date是:%i年%i月%i日",date.year,date.month,date.day);
    49     //void *代表任何类型的指针,这里第一个参数要传一个void *类型(即这个date的地址)
    50     //第二个参数是指这个数据的类型,char *是一个C语言类型的char类型的指针,@encode根据结构体类型,生成对于的类描述字符串
    51     char *type=@encode(Date);
    52     NSValue *value=[NSValue value:&date withObjCType:type];//这样就能成功的将一个结构体类型包装成一个OC对象
    53     //取出包装好的结构体
    54     //定义一个结构体变量
    55     Date date1;
    56     [value getValue:&date1];//将包装的结构体取出来,赋给date1,经过这个方法调用之后,date1里面就有值了
    57     //取出类型描述字符串
    58     //[value objCType]; //这里就等同于上面的type
    59     //直接打印输出结构体
    60     //NSString *str=NSStringFromPoint(date1);  //由于不是使用的系统内置的结构体,所以不好使用它封装好的方法
    61     NSLog(@"取出来的date1是:%i年%i月%i日",date1.year,date1.month,date1.day);
    62 }
    63 
    64 int main(int argc, const char * argv[])
    65 {
    66 
    67     @autoreleasepool {
    68         
    69         //NSNumber只能包装数字,NSValue能包装所有的对象,如果我们向包装一个结构体,那就不能用NSNumber,只能用NSValue
    70         //value();
    71         value2();
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    如果你的领导是力量型,你在汇报工作时应该注意()。
    项目管理的10项原则
    扑克k,你知道的人物吗?
    搭建属于您自己的软件版本控制
    Android保持屏幕常亮的方法
    BMP图像数据格式详解
    Android终止线程的方法
    使用ContentProvider访问其他应用的SharedPreferences数据
    android gps定位LocationManager
    Android属性之build.prop生成过程分析
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/3083976.html
Copyright © 2011-2022 走看看