У меня есть эта конкретная проблема, но если вы найдете мою первоначальную дизайнерскую идею с умом и иметь лучшее предложение, пожалуйста, дайте мне знать :)Проблемы отпуская объект с помощью «removeFromSuperView» iPhone
У меня есть UIView, который действует как контейнер/фон для добавления других видов. Важно то, что одновременно присутствует только одна точка зрения. Поэтому, прежде чем делать какие-либо добавления взглядов я делаю это:
for(UIView *v in [self.currentView subviews]) {
[v removeFromSuperview];
}
self.currentView мнение я добавить свои подвидов в.
После этого добавить новый UIView таким образом:
UIView *tempView;
switch (self.currentIndex) {
case 1:
tempView = [[AView alloc] initWithFrame:frame];
[self.currentView addSubview:tempView];
[tempView release];
break;
case 2:
tempView = [[AView alloc] initWithFrame:frame];
[self.currentView addSubview:tempView];
[tempView release];
break;
default:
break;
}
Таким образом, я удалить все точки зрения, так как я выпускаю tempView сразу после того, как я добавить его в self.currentView я в конечном итоге с сохранить количество единиц в текущем проживании UIView в currentView.
Все это кажется прекрасным, но поскольку я смотрю на него с помощью инструментов, я вижу, что каждый раз, когда я запускаю вышеуказанный код, выделяется новый объект AView, а старый держится с сохранением числа 1, либо я я пропустил какое-то очевидное действие сохранения на моем объекте, иначе «removeFromSuperView» не вызывает «release» на моем представлении.
В реальной жизни мои объекты не имеют тип AView, но многих разных типов, но я могу проверить, есть ли только один экземпляр AView.
Как я могу прочитать из документации, «removeFromSuperView» должен вызвать «release» в представлении, поэтому я немного смущен, почему мои представления не освобождены.
Опять же, возможно, я собираюсь сделать это неправильно, и предложения действительно приветствуются. Настройка заключается в том, что в нижней части экрана есть несколько кнопок и когда пользователь нажимает на изменение вида.
Спасибо за любую помощь или указатели дали :)
Если одновременно присутствует только один вид, то почему вы используете цикл для удаления представления? –
Что это такое ... в синтаксисе? Я думал, что цель-с не поддерживает ... в. – martinr
Привет и спасибо, ребята. Цикл for был главным образом для проверки по точке останова, сколько просмотров было удалено, оно всегда выполняется только один раз. Я вижу, что я меняю коллекцию, поскольку я перечисляю ее, и это может быть проблемой. Но разве это будет иметь значение? Код удаления запускается для единственного вида, который там живет ... Для этого нужно быть в порядке :) он работал до сих пор. Может ли это быть цикл, который сохраняет ссылку на объект? Еще раз спасибо – RickiG