Вопрос

У меня есть 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, чтобы все, что вы создаете во время выполнения потока, было очищено.Здесь это не должно иметь значения, поскольку оно уже должно существовать, но попытаться стоит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top