看一看這個僞代碼:NSValue在釋放時是否釋放其價值?
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
當V被釋放,並magicpointer得到解脫出來爲好,還是我必須這樣做手工?我正在使用手動引用計數。
看一看這個僞代碼:NSValue在釋放時是否釋放其價值?
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
當V被釋放,並magicpointer得到解脫出來爲好,還是我必須這樣做手工?我正在使用手動引用計數。
它不會被釋放 - NSValue只是一個包裝,因此您可以將任意值視爲對象。它不會對包裝的指針做任何事情。
NSValue在釋放NSValue時不釋放指針。該文件說,關於存儲在一個NSValue指針的唯一的事情是:
如果創建一個分配的數據項的NSValue對象,做而NSValue對象存在不 解除分配內存。
使用NSValue的主要原因是爲了放置一個值,以便它可以放入只接受對象的NSArray或類似集合中。因爲不再需要NSValue框,所以釋放內存是沒有意義的。
不,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.
更加有用的答案,因爲它引入了另一種方式,感謝文森特! – 2012-07-16 18:58:03