【问题标题】:Does NSValue free its value when freed?NSValue 释放时是否释放其价值?
【发布时间】:2012-04-25 12:56:29
【问题描述】:

看看这个伪代码:

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

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

【问题讨论】:

    标签: objective-c pointers memory-management nsvalue


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      不,NSValue 不会。

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

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

      【讨论】:

      • 更多有用的答案,因为它引入了另一种方法,谢谢文森特!
      【解决方案3】:

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

      如果你创建一个带有分配数据项的 NSValue 对象,不要 在 NSValue 对象存在时释放其内存。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-08
        • 2011-09-24
        • 1970-01-01
        • 2011-11-09
        • 2011-06-04
        • 2011-08-19
        相关资源
        最近更新 更多