1

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

我已经研究过NSData,它似乎接受任意数据,但想知道我没有的内存块的长度。

任何帮助表示赞赏。

4

1 回答 1

5

该类NSValue通常用于此任务:

NSValue* value = [NSValue valueWithPointer: myPointer];

void* myPointer = [value pointerValue];

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

但是请注意,在 a 中将这样的值与NSSet或作为键一起使用NSDictionary可能会或可能不会产生预期的效果:

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

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

于 2012-05-17T10:51:28.880 回答