Что за сделка с NSZoneFree в - (void) dealloc? - PullRequest
4 голосов
/ 28 ноября 2008

В документации Apple по NSObject NSZoneFree вызывается в примере кода - (void) dealloc:

- (void)dealloc {
    [companion release];
    NSZoneFree(private, [self zone])
    [super dealloc];
}

Вы можете найти его в контексте здесь .

У меня никогда не было идеи, что мне следует вызывать NSZoneFree в моих собственных подклассах NSObject (или в каких подклассах NS_WhwhatClass_), и я не могу найти что-либо убедительное по этой теме в документации.

Все, что я могу найти об использовании NSZoneFree, - это краткое упоминание в Руководстве по программированию управления памятью и объяснение функции в Справочник основных функций , но ни один из этих документов объясни мне, стоит ли мне беспокоиться об этом в контексте метода dealloc.

Кто-нибудь может уточнить, когда я должен поместить вызов NSZoneFree в реализации dealloc моих собственных классов?

Редактировать: Спасибо за ваши ответы, теперь мне понятнее :) - Дирк

Ответы [ 2 ]

2 голосов
/ 29 ноября 2008

NSZoneFree() балансирует вызов на NSZoneMalloc(), так же как -release балансирует вызов на -alloc или -copy и CFRelease() балансирует вызов на CFRetain() или CF*Create*() или, для этого независимо от того, free() балансирует вызов на malloc() или calloc().

Учитывая распределитель (и), который библиотека C использует в Mac OS X, большая часть этого является академической, но лучшие практики говорят, что вы освобождаете свою память таким же образом, как вы ее получили, и в случае этого класса переменная экземпляра private ранее была выделена с NSZoneMalloc().

1 голос
/ 28 ноября 2008

Согласно справочнику Foundation :

Возвращает память в зону, из которой она была выделена. Стандартная функция C free делает то же самое, но тратит время на поиск зоны, к которой принадлежит память.

Итак, вы в основном используете NSZoneFree () вместо free () при очистке памяти malloc и calloc. Однако обычно вам не нужно это называть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...