大家都应该知道NSValue可以包装CGPoint,CGSize等结构体,对于普通结构体可以这样包装,我猜想系统也是用类似的方法包装
- // 默认开启ARC
- #import <Foundation/Foundation.h>
- typedef struct{
- int age;
- char *name;
- } Student;
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
-
- Student s;
- s.age = 22;
- s.name = "mike";
- // 包装结构体
- /*
- [NSValue value:<#(const void *)#> withObjCType:<#(const char *)#>]
- 参数1 : 目标结构体地址
- 参数2 : 结构体的类型,它必须使用编译器的@endcode指令来创建
- @encode(结构体类型,但不能使用C语言字符串作为硬编码作为参数)
- */
- NSValue *value = [NSValue valueWithBytes:&s objCType:@encode(Student)];
-
- Student temp;
- [value getValue:&temp];
- NSLog(@"name is %s ,age is %d",temp.name,temp.age); // name is mike ,age is 22
- }
- return 0;
- }
复制代码
|
|