NSValue在释放时是否释放其价值?

时间:2012-04-13 06:16:24

标签: objective-c pointers memory-management nsvalue

看看这个伪代码:

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

不,NSValue不会。

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

    void* magicpointer = malloc(OVER_NINE_THOUSAND);
    NSData *d = [NSData dataWithBytesNoCopy:magicpointer
                                     length:OVER_NINE_THOUSAND
                               freeWhenDone:YES];
    //d is autoreleased, so no need to -release it.

答案 2 :(得分:1)

NSValue在释放NSValue时不释放指针。文档中关于存储在NSValue中的指针的唯一内容是:

  

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

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