黑马程序员技术交流社区

标题: NSValue包装C结构体 [打印本页]

作者: 明天过后1    时间: 2014-10-9 22:18
标题: NSValue包装C结构体
大家都应该知道NSValue可以包装CGPoint,CGSize等结构体,对于普通结构体可以这样包装,我猜想系统也是用类似的方法包装
  1. // 默认开启ARC
  2. #import <Foundation/Foundation.h>

  3. typedef struct{
  4.     int age;
  5.     char *name;
  6. } Student;

  7. int main(int argc, const char * argv[]) {
  8.     @autoreleasepool {
  9.         
  10.         Student s;
  11.         s.age = 22;
  12.         s.name = "mike";
  13.         // 包装结构体
  14.         /*
  15.           [NSValue value:<#(const void *)#> withObjCType:<#(const char *)#>]
  16.            参数1 : 目标结构体地址
  17.            参数2 : 结构体的类型,它必须使用编译器的@endcode指令来创建
  18.                    @encode(结构体类型,但不能使用C语言字符串作为硬编码作为参数)
  19.          */
  20.         NSValue *value = [NSValue valueWithBytes:&s objCType:@encode(Student)];
  21.         
  22.         Student temp;
  23.         [value getValue:&temp];
  24.         NSLog(@"name is %s ,age is %d",temp.name,temp.age); // name is mike ,age is 22

  25.     }
  26.     return 0;
  27. }
复制代码




作者: 易孟飞    时间: 2014-10-9 22:53
这用的指针的强制转换
作者: 明天过后1    时间: 2014-10-9 23:04
易孟飞 发表于 2014-10-9 22:53
这用的指针的强制转换

哥们很好学啊




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