В вашем коде есть два сохранения, которые служат разным целям. Лучше держать их отдельно.
Сохранить # 1
Первое удержание подразумевается aSubview = [[NSView alloc] initWithFrame(0.0, 0.0, 100.0, 100.0);
. Поскольку aSubview
является переменной экземпляра, и вы, похоже, хотите сохранить aSubview
в качестве действительной ссылки на представление после запуска инициализатора, имеет смысл, что подразумеваемое сохранение будет сбалансировано release
в dealloc
.
Сохранить # 2
При добавлении в иерархию представлений ваш экземпляр представления будет сохраняться любым представлением, к которому он относится. То, что это self
в этом случае, не имеет значения. Пока представление является частью иерархии представления, это сохранение будет в силе. Когда он будет удален, он будет освобожден.
<Ч />
Это ортогональные реализации продолжительности жизни объекта. Хранение их отдельно делает ваш код менее хрупким.
Например, если в какой-то будущей версии вам придется иногда удалять представление из иерархии представлений с желанием добавить его позже - окончательное показ / скрыть, если хотите, - тогда сохранит # 1 выше сохранит это.
Точно так же, если вы когда-нибудь захотите забыть о текущем представлении, но заменить его другим, вы можете просто сделать:
[aSubview release];
aSubview = [[.... alloc] ... init ... ];
И, в этом случае, retain # 2 выше сохранит старый вид в иерархии представлений.