A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 明天过后1 中级黑马   /  2014-10-9 22:18  /  780 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家都应该知道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. }
复制代码



2 个回复

倒序浏览
这用的指针的强制转换
回复 使用道具 举报
易孟飞 发表于 2014-10-9 22:53
这用的指针的强制转换

哥们很好学啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马