2012-04-13 27 views
1

看一看這個僞代碼:NSValue在釋放時是否釋放其價值?

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

當V被釋放,並magicpointer得到解脫出來爲好,還是我必須這樣做手工?我正在使用手動引用計數。

回答

5

它不會被釋放 - NSValue只是一個包裝,因此您可以將任意值視爲對象。它不會對包裝的指針做任何事情。

1

NSValue在釋放NSValue時不釋放指針。該文件說,關於存儲在一個NSValue指針的唯一的事情是:

如果創建一個分配的數據項的NSValue對象,做而NSValue對象存在不 解除分配內存。

使用NSValue的主要原因是爲了放置一個值,以便它可以放入只接受對象的NSArray或類似集合中。因爲不再需要NSValue框,所以釋放內存是沒有意義的。

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. 
+0

更加有用的答案,因爲它引入了另一種方式,感謝文森特! – 2012-07-16 18:58:03

相關問題