寻找合适的Objective-C对象来包装C void *指针

时间:2012-05-17 10:27:54

标签: objective-c

我正在开发一个在Objective-C代码中嵌入C代码的项目。 C代码生成一些我想在Objective-C方法之间传递的void *指针,因此我想将它们包装在Objective-C对象中以生成NSSet或类似的东西。

我调查了NSData,它似乎接受任意数据,但想知道内存块的长度,我没有。

感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

NSValue类通常用于此任务:

NSValue* value = [NSValue valueWithPointer: myPointer];

void* myPointer = [value pointerValue];

但请注意,给出的指针在内存管理方面不会受到任何特殊处理。你(和你一个人)负责确保它指向的内存保持有效,只要存在指向该内存区域的指针并且在程序的某些部分可以访问它。

请注意,在NSSet中使用NSDictionaryNSData中的键这样的值可能会或可能不会产生预期效果:

NSData本质上是一个字节缓冲区。它实际上代表了有问题的内存的内容。比较NSData实例的相等性在字节级别进行比较。这是NSValue需要了解相关内存区域长度的原因之一。

具有指针值的

NSValue是完全不同的野兽。这里,实际(数字)指针值是必不可少的。没有考虑(比较两个{{1}}个实例)与地址的实际内容。