Как удалить подпредставление (или все подпредставления представления) - PullRequest
1 голос
/ 02 мая 2011

У меня есть метод, в котором я размещаю и запускаю

UIView (`tabsClippedView = [[[UIView alloc] initWithFrame:tabsClippedFrame] autorelease];`).

К этому представлению добавлен другой вид

(`tabsView = [[[UIView alloc] initWithFrame:tabsFrame] autorelease];`).     

Затем я запускаю пару кнопок

(e.g. `UIButton* btn = [[[UIButton alloc] initWithFrame:frame] autorelease];`)

и добавьте их в подпредставление представления.

Теперь время от времени мне нужно удалять все кнопки и назначать их снова. Это лучший способ удалить весь вид или просто подпредставление, к которому я добавил кнопки?

Как мне это сделать (без утечки памяти и т. Д.)? Будет простой

self.tabsView = nil;

достаточно, чтобы удалить представление и все его подпредставления (т.е. кнопки)?

Или лучше удалить суперпредставление, чтобы начать с нуля:

self.tabsClippedView = nil;

Ответы [ 2 ]

14 голосов
/ 02 мая 2011

Поскольку ваш UIView выпущен автоматически, вам просто нужно удалить его из суперпредставления. Для которого есть метод removeFromSuperview.

Итак, вы просто хотите позвонить [self.tabsView removeFromSuperview]. Пока ваша декларация свойства установлена ​​на retain, это все, что вам нужно.

4 голосов
/ 02 мая 2011

Другое решение: не удаляйте свои UIButtons, а используйте их повторно.Не знаю точного варианта использования для вас, но вы можете назначить tags своему UIButtons и найти их с [UIView viewWithTag:].

UIButton* btn = [[UIButton alloc] initWithFrame:frame];
btn.tag = 42; // some unique identifier for the button.. dont use 0 (zero)
[tabsView addSubview:btn];
[btn release];

позже ...

UIButton* btn = (UIButton*)[tabsView viewWithTag:42];
if(btn && [btn isKindOfClass:[UIButton class]]) {
    // do some stuff with btn
}

Кроме того: По моему мнению, вы должны использовать autorelease только тогда, когда у вас нет других вариантов.Здесь вы можете легко выпустить btn после добавления его в качестве подпредставления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...