Чтобы удалить вид из его надтаблицы:
[view removeFromSuperview];
SuperView выпустит мнение в этой точке. Поэтому, если супервизор является единственным действующим лицом, обладающим ссылкой, то представление будет освобождено. Иными словами, это:
[superview addSubview:view];
вызывает наблюдение, чтобы сохранить вид. Таким образом, вы часто видите блоки кода, такие как:
view = [[ViewClass alloc] initWithFrame:frame]; // I own view
[superview addSubview:view]; // superview and I both own view
[view release]; // now only superview owns view;
// it'll be deallocated if
// superview ever relinquishes
// ownership
Так теперь у вас есть указатель для просмотра, который действителен до тех пор, пока точка зрения остается в надтаблицах. Поэтому впоследствии можно безопасно разместить removeFromSuperview
, но после этого использование представления явно небезопасно. Объект view будет жить только между alloc/init и removeFromSuperview. Он будет освобожден после удаления.
Per нормальных правил ссылочных какао подсчета, следующий в значительной степени так же, как капля в замену на Alloc/инициализации и последующего выпуска:
view = [ViewClass viewWithFrame:frame]; // view is an autoreleased object;
// the autorelease pool owns it
[superview addSubview:view]; // superview now owns view also
// the autorelease pool will relinquish ownership automatically, in the future...
Если вы ничего не сделали вручную влияют на поведение, будучи просто в обычном runloop, тогда вещи в пуле авторесурсов безопасны для жизни текущего стека вызовов. В этом случае вы будете обрабатывать представление точно так же, как в примере с ручным распределением/инициализацией, возможно, внеся изменения, чтобы сохранить строку кода и оставить управление памятью неявным.