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