1

是否可以使用指向 C 结构的指针实例化 NSValue 而无需创建自动释放池?目前,我这样做:

NSValue* val = [NSValue valueWithPointer:(const void*)structure];

但这是由自动释放池释放的。我想控制它并能够在我想要的时候释放它。这可能吗?我试过这个:

NSValue* value = [[NSValue alloc] initWithBytes:(const void*)structure objCType:@encode(const void*)];
[value release];

但由于某种原因它正在崩溃。还有什么方法可以立即释放吗?谢谢!

4

2 回答 2

3

您应该传递一个指向objCType:参数提供的类型的指针。您正在传递一个类型为 的变量。因此,例如,如果您有一个int foo想要存储在 NSValue 中的变量,您可以编写[[NSValue alloc] initWithBytes:&foo objCType:@encode(int)]. 因此,如果要存储指针,则需要将指向该指针的指针作为字节传递。传递指针本身将导致 NSValue 尝试跟随指针,然后将其指向的字节也视为指针。

于 2010-12-02T23:35:30.297 回答
0
NSValue* val = [NSValue valueWithPointer:(const void*)structure];
[val retain];
于 2010-12-03T11:12:28.397 回答