我正在开发一个在Objective-C代码中嵌入C代码的项目。 C代码生成一些我想在Objective-C方法之间传递的void *指针,因此我想将它们包装在Objective-C对象中以生成NSSet
或类似的东西。
我调查了NSData
,它似乎接受任意数据,但想知道内存块的长度,我没有。
感谢任何帮助。
答案 0 :(得分:5)
NSValue
类通常用于此任务:
NSValue* value = [NSValue valueWithPointer: myPointer];
和
void* myPointer = [value pointerValue];
但请注意,给出的指针在内存管理方面不会受到任何特殊处理。你(和你一个人)负责确保它指向的内存保持有效,只要存在指向该内存区域的指针并且在程序的某些部分可以访问它。
请注意,在NSSet
中使用NSDictionary
或NSData
中的键这样的值可能会或可能不会产生预期效果:
NSData
本质上是一个字节缓冲区。它实际上代表了有问题的内存的内容。比较NSData
实例的相等性在字节级别进行比较。这是NSValue
需要了解相关内存区域长度的原因之一。
NSValue
是完全不同的野兽。这里,实际(数字)指针值是必不可少的。没有考虑(比较两个{{1}}个实例)与地址的实际内容。