Ответ 1
Ответ Кевина и Робин является наиболее точным. Ответ на Оскар довольно близок к правильному. Но ни документальная документация Gnustep, ни причины logancautrell для существования зон не являются правильными.
Зоны были первоначально созданы - сначала NXZone, затем NSZone - чтобы объекты, выделенные из одной зоны, были относительно непрерывными в памяти, это правда. Как оказалось, это не уменьшает объем памяти, которую использует приложение; в большинстве случаев он немного увеличивает его.
Большая цель состояла в том, чтобы иметь возможность массово уничтожать множество объектов.
Например, если вы должны были загрузить сложный документ в приложение на основе документа, срыв графа объекта при закрытии документа может быть довольно значительным.
Таким образом, если все объекты для документа были выделены из одной зоны, и метаданные выделения для этой зоны также были в этой зоне, то уничтожение всех объектов, связанных с документом, было бы столь же дешевым, как просто уничтожение зоны ( который был действительно дешев - "здесь, система, верните эти страницы" - один вызов функции).
Это оказалось неработоспособным. Если бы одна ссылка на объект в зоне просочилась из зоны, ваше приложение переместило бы BOOM, как только документ был закрыт, и не было никакого способа, чтобы объект указывал все, что имело отношение к он должен остановиться. Во-вторых, эта модель также стала жертвой проблемы с дефицитом ресурсов, которая часто встречается в системе GC'd. То есть, если графический объект документа хранится на ресурсах без памяти, не было возможности эффективно очищать указанные ресурсы до разрушения зоны.
В конце концов, комбинация почти не выигрывает от производительности (как часто вы действительно закрываете сложные документы), при этом вся добавленная хрупкость создала зоны плохой идеей. Слишком поздно менять API-интерфейсы, и мы остаемся с остатками.