2012-03-13 3 views
3

Я пытаюсь повторно использовать ярлык, обратившись к viewWithTag, когда я нажимаю UIButton. Код выглядит нормально, когда он выполняется в первый раз, но протекает ли он при выполнении его несколько раз из-за строки 7? Также лучше удалить метку из супервизора, alloc и addSubview вместо использования viewWithTag?viewWithTag and addSubview

1. UILabel *label = (UILabel *)[self.view viewWithTag:100]; 
2. if(label == nil) { 
3. label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease]; 
4. label.tag = 100; 
5. } 
6. 
7. [self.view addSubview:label]; 

ответ

5

Переместить код [self.view addSubview:label]; внутри вашего if блока. Когда ваше условие if является ложным, это означает, что метка уже является частью иерархии представлений viewcontroller, поэтому, если вы добавите ее снова, как в исходном коде, она будет дважды сохранена.

UILabel *label = (UILabel *)[self.view viewWithTag:100]; 
if (!label) { 
    label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease]; 
    label.tag = 100; 
    [self.view addSubview:label]; 
} 
+0

Я собираюсь попробовать. Как я могу улавливать утечки памяти? – apy

+0

Используйте инструменты, чтобы найти возможные утечки. Вот урок: http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial – jonkroll

+0

По какой-то причине инструменты не считают мой предыдущий код любые утечки. – apy

0

Если вы используете .xib или раскадровку, просто связывайте ее с IBOutlet.

Если вы используете только код, попробуйте сохранить его как приватную переменную.

+0

Я создаю свои взгляды программно, поэтому у меня будет много иваров для управления. – apy

Смежные вопросы