NSValue освобождает свою ценность после освобождения?
Посмотрите на этот псевдокод:
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
Когда выпущен v, освобождается ли magicpointer или мне нужно делать это вручную? Я использую ручной подсчет ссылок.
3 ответа
Он не освобождается - NSValue - просто оболочка, поэтому вы можете рассматривать произвольные значения как объекты. Он ничего не делает с обернутым указателем.
Нет, NSValue
не будет.
Похоже, вы можете использовать NSData
, он может освободить указатель, когда выйдет:
void * magicpointer = malloc (OVER_NINE_THOUSAND); NSData * d = [NSData dataWithBytesNoCopy: magicpointer Длина:OVER_NINE_THOUSAND freeWhenDone: ДА]; //d автоматически выпущен, так что нет необходимости выпускать его.
NSValue не освобождает указатель при освобождении NSValue. Единственное, что в документации говорится о указателе, хранящемся в NSValue, это:
Если вы создаете объект NSValue с выделенным элементом данных, не освобождайте его память, пока существует объект NSValue.
Основная причина использования NSValue заключается в том, чтобы поместить значение в ячейку, чтобы оно могло быть помещено в NSArray или подобную коллекцию, которая принимает только объекты. Освобождение памяти не имеет смысла просто потому, что поле NSValue больше не нужно.