看看这个伪代码:
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
当 v 被释放时,magicpointer 是否也会被释放,还是我必须手动执行?我正在使用手动引用计数。
看看这个伪代码:
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
当 v 被释放时,magicpointer 是否也会被释放,还是我必须手动执行?我正在使用手动引用计数。
它不会被释放 - NSValue 只是一个包装器,因此您可以将任意值视为对象。它对包装的指针没有任何作用。
不,NSValue
不会。
听起来您可能想使用NSData
,它可以在发布时释放它的指针:
void* 魔法指针 = malloc(OVER_NINE_THOUSAND); NSData *d = [NSData dataWithBytesNoCopy:magicpointer 长度:OVER_NINE_THOUSAND freeWhenDone:YES]; //d 是自动释放的,所以不需要 -release 它。
当 NSValue 被释放时,NSValue 不会释放指针。文档中关于存储在 NSValue 中的指针的唯一说明是:
如果您使用已分配的数据项创建 NSValue 对象,请不要在 NSValue 对象存在时释放其内存。
使用 NSValue 的主要原因是将值装箱,以便可以将其放入 NSArray 或仅接受对象的类似集合中。仅仅因为不再需要 NSValue 框而释放内存是没有意义的。