#import <Foundation/Foundation.h>
typedef struct Node {
int offset;
} Node;
int main (int argc, const char * argv[])
{
@autoreleasepool {
NSMutableArray *array = [[NSMutableArray alloc] init];
Node node = {111111};
NSValue *value = [NSValue value:&node withObjCType:@encode(Node)];
[array addObject:value];
NSValue *structValue = [array objectAtIndex:0];
Node *n = (Node *)[structValue pointerValue];
printf("offset: %d", n->offset);
}
return 0;
}
代码在此行崩溃:printf("offset: %d", n->offset);
,但为什么?
答案 0 :(得分:3)
获得c值的正确方法是getValue:
:
Node n;
[structValue getValue:&n];
pointerValue
不返回指向存储值的指针,它从存储Node
的内存中读取指针值(如union { Node n; void* pointerValue; }
)。
答案 1 :(得分:2)
如果要添加指针并接收指针,请改为使用NSValue *value = [NSValue valueWithPointer:&node];
。