zoukankan      html  css  js  c++  java
  • 十五:NSValue

    NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids(NSNumber只能保存基本数据类型,不能保存结构体)。NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray或者NSDictionary的实例。需要注意的是NSValue对象一直是不可枚举的。

    下面主要介NSValue保存结构体类型,代码如下:

     1 #import <Foundation/Foundation.h>
     2 
     3 int main(int argc, const char * argv[]) {
     4     @autoreleasepool {
     5         //常用结构体类型的转化
     6         CGPoint point = {35,67};
     7         NSValue *pointV = [NSValue valueWithPoint:point];
     8         CGRect rect = {34,2,34,78};
     9         NSValue *rectV = [NSValue valueWithRect:rect];
    10         NSLog(@"%@  %@",pointV,rectV);
    11         //还有其他结构体类型
    12 //        valueWithSize
    13 //        valueWithRange
    14 //        valueWithPointer
    15 //        valueWithEdgeInsets
    16     
    17         //自定义结构体的转化
    18        typedef struct {
    19             int age;
    20             char *name;
    21             double weight;
    22         }Person;
    23         Person p = {32,"James",230.0}; //此处p前面不能加*
    24         //转化为对象类型
    25         //valueWithBytes:接收一个指针,即需要包装的结构体变量的指针
    26         //objCType:需要包装的数据类型,@encode开头
    27         NSValue *pV = [NSValue valueWithBytes:&p objCType:@encode(Person)];
    28         //打印出来的是二进制,所以需要取出pV中的数据打印
    29         NSLog(@"%@",pV);
    30         //从Value取出自定义机构体变量
    31         Person contentPV;
    32         [pV getValue:&contentPV];
    33         NSLog(@"%d %s %f",contentPV.age,contentPV.name,contentPV.weight); 
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    计算机组成原理学习总纲图
    USE RED
    既有的问题如何解决
    字符串极值题解
    扩展 KMP
    KMP
    FHQ-Treap
    STL
    iOS内存管理理论知识过一遍
    iOS中Block理论知识过一遍
  • 原文地址:https://www.cnblogs.com/hissia/p/5457147.html
Copyright © 2011-2022 走看看