Как я могу справиться с утечкой памяти Subview? - PullRequest
0 голосов
/ 07 декабря 2010

Прибор Leaks подает звуковой сигнал по какому-то коду, но я не знаю, как устранить утечку без сбоя приложения.Вот некоторый код, обобщающий мой подход, написанный некоторое время назад и явно нуждающийся в переосмыслении:

labels = [[NSMutableArray alloc] init];

for(int i = 0; i < 10; i++) {
    // calculate x and y...
    label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 70, 15)];
    // customize label...
    [labels addObject:label];
    [label release];
    [self addSubview:[labels objectAtIndex:i]];
}

Зачем беспокоиться о метках NSMutableArray?Позже, в других методах, мне нужно изменить альфа-метку, и удобно иметь возможность сказать

[[labels objectAtIndex:num] setAlpha:0.5];

Я полагаю, что утечка происходит, потому что метки не освобождаются во время обычнойжизненный цикл приложения, только когда супер-просмотр удаляется при выходе.

Справка!

Спасибо.

1 Ответ

0 голосов
/ 07 декабря 2010

Вероятно, это происходит потому, что вы не освобождаете массив меток. Как насчет освобождения массива меток после цикла for, затем с помощью .tag установить метку на UIView и найти метку позже через .tag, используя viewWithTag для установки Alpha?

labels = [[NSMutableArray alloc] init];

for(int i = 0; i < 10; i++) {
    // calculate x and y...
    label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 70, 15)];
    label.tag = 100;
    // customize label...
    [labels addObject:label];
    [label release];
    [self addSubview:[labels objectAtIndex:i]];
}

[labels removeAllObjects];
[labels release];

Потом позже

(UILabel*) [[self.view viewWithTag:100] setAlpha:0.5];
...