UILabel меняется во время выполнения, управляет памятью для изменения строк - PullRequest
1 голос
/ 10 ноября 2010

У меня есть пара ярлыков, которые я использую в качестве HUD для игрока во время игры. Я часто обновляю эти ярлыки, чтобы у игрока была актуальная информация. Проблема в том, что я использовал

uiLabel.text = [NSString stringWithFormat:@"%3.0f", value];

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

Я также пытался явно распределять и освобождать строки, например:

NSString* value = [[NSString alloc] initWithFormat: @"%3.0f", value];
uiLabel.text = value;
[value release];

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

Кто-нибудь может увидеть, что я здесь делаю, что я явно не вижу? Есть ли лучший / более предпочтительный способ справиться с этим? Некоторый беглый поиск мне не особо помог.

1 Ответ

2 голосов
/ 10 ноября 2010

Вы не делаете ничего необычного.Даже с:

uiLabel.text = [NSString stringWithFormat:@"%3.0f", value];

пул автоматического выпуска очищается каждый раз, когда ваш код возвращает управление в цикл выполнения (так по крайней мере так часто, как вы видите обновление пользовательского интерфейса).Если вы видите растущее распределение памяти, вы должны искать в другом месте.

...