1

看看这个伪代码:

void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];

当 v 被释放时,magicpointer 是否也会被释放,还是我必须手动执行?我正在使用手动引用计数。

4

3 回答 3

5

它不会被释放 - NSValue 只是一个包装器,因此您可以将任意值视为对象。它对包装的指针没有任何作用。

于 2012-04-13T06:20:31.533 回答
5

不,NSValue不会。

听起来您可能想使用NSData,它可以在发布时释放它的指针:

    void* 魔法指针 = malloc(OVER_NINE_THOUSAND);
    NSData *d = [NSData dataWithBytesNoCopy:magicpointer
                                     长度:OVER_NINE_THOUSAND
                               freeWhenDone:YES];
    //d 是自动释放的,所以不需要 -release 它。
于 2012-04-13T06:35:21.100 回答
1

当 NSValue 被释放时,NSValue 不会释放指针。文档中关于存储在 NSValue 中的指针的唯一说明是:

如果您使用已分配的数据项创建 NSValue 对象,请不要在 NSValue 对象存在时释放其内存。

使用 NSValue 的主要原因是将值装箱,以便可以将其放入 NSArray 或仅接受对象的类似集合中。仅仅因为不再需要 NSValue 框而释放内存是没有意义的。

于 2012-04-13T06:27:42.967 回答