看看这个伪代码:
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
当v发布时,magicpointer也会被释放,还是我必须手动执行?我正在使用手动引用计数。
答案 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框而释放内存是没有意义的。