Утечка памяти UILabel?
-
03-07-2019 - |
Вопрос
У меня есть NSTimer, который срабатывает каждую секунду, и в эту секунду я обновляю UILabel, устанавливая свойство text следующим образом:
remainglbl.text = [NSString stringWithFormat:@"%i:%02i", var1, var2];
Он работает нормально, но когда я запускаю его в xcode с помощью Start With Performance Tool -> Leaks, кажется, что память продолжает расти, подниматься и подниматься.
Насколько я понимаю, строка должна быть автоматически освобождена (хотя я никогда не вижу, чтобы память уменьшалась или прекращала увеличиваться).
Это утечка памяти?Есть ли лучший способ сделать это, чтобы контролировать использование памяти?
Спасибо!
Обновлять:код для создания таймера выглядит следующим образом:
timeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeTime:) userInfo:nil repeats:YES];
код очистки по завершении таймера выглядит следующим образом:
[timeTimer invalidate];
[timeTimer release];
timeTimer = nil;
Что-нибудь не так с этим?Я думал, что память может быть освобождена после завершения таймера, но это не так.
Решение
Я считаю, что проблема заключалась в том, что я не разбирался в инструментах производительности.Запуск с помощью Монитора активности не показывает увеличения использования памяти.
Другие советы
Просто из любопытства, проблема все еще возникает, если вы используете [remainingLbl setText:] вместо установки свойства?Ваш код выглядит нормально...память должна быть очищена, поскольку stringWithFormat автоматически освобождает строку.
Еще одна вещь, которую стоит попробовать:когда вы создаете потоки в Objective-C, вам необходимо поместить весь код в NSAutoreleasePool, чтобы все, что вы создаете во время выполнения потока, было очищено.Здесь это не должно иметь значения, поскольку оно уже должно существовать, но попытаться стоит.