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 больше не нужно.

Другие вопросы по тегам