В документации Apple NSObject NSZoneFree вызывается в примере кода - (void) dealloc:
- (void)dealloc {
[companion release];
NSZoneFree(private, [self zone])
[super dealloc];
}
Вы можете найти его в контексте сюда.
У меня никогда не было идеи, что я должен вызывать NSZoneFree в моих собственных подклассах NSObject (или каких подклассах NS_WhateverClass_), и я не могу найти ничего убедительного по теме где-либо в документации.
Все, что я могу найти об использовании NSZoneFree, - это краткое упоминание в Руководство по программированию управления памятью и объяснение функции в Справочник по функциям Foundation, но ни один из этих документов не дает мне понять, должен ли я беспокоиться об этом в контексте метода dealloc.
Может ли кто-нибудь уточнить, когда я должен поместить вызов NSZoneFree в реализации освобождения моих собственных классов?
Обновлено: Спасибо за ваши ответы, теперь мне стало понятнее :) - Дирк





Согласно Ссылка на фонд:
Returns memory to the zone from which it was allocated. The standard C function free does the same, but spends time finding which zone the memory belongs to.
Итак, вы в основном используете NSZoneFree () вместо free () при очистке памяти malloc'd и calloc'd. Однако обычно вам не нужно его называть.
NSZoneFree() уравновешивает вызов NSZoneMalloc(), точно так же, как -release уравновешивает вызов -alloc или -copy, а CFRelease() уравновешивает вызов CFRetain() или CF*Create*() или, если на то пошло, free() уравновешивает вызов malloc() или calloc().
Учитывая распределители, которые библиотека C использует в Mac OS X, многое из этого носит академический характер, но в лучших практиках говорится, что вы освобождаете удержание памяти таким же образом, как и получили, и в случае этого класса экземпляр переменная private ранее была отнесена к NSZoneMalloc().