Почему `- [UILabel setText:]` Утечка? - PullRequest
2 голосов
/ 12 января 2011

В классе UIScrollViewDelegate на iOS 4.2.1 в моем приложении для iPad метод -scrollViewDidEndDecelerating: вызывает другой метод, который делает это:

EntryModel *entry = [entries objectAtIndex:index];
self.titleLabel.text = entry.title;

title является неатомарным, сохраненным свойством NSString EntryModel. titleLabel - это неатомарное сохраняемое свойство с IBOutlet, соединяющим его с UILabel, определенной в кончике. После сообщения в блоге bbum я использовал анализ Heapshot и идентифицировал приведенный выше код как утечку. Почти каждый раз, когда я перехожу на новую страницу, titleLabel немного просачивается:

alt text

Если я изменю эту вторую строку на:

self.titleLabel.text = @"Whatever";

Утечка прекращается:

alt text

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

Ответы [ 2 ]

1 голос
/ 12 января 2011

Может быть, у вас на самом деле нет утечки памяти.Вы выделяете памяти, поскольку свойство текста в UILabel использует семантику копирования.Таким образом, вызов self.titleLabel.text создаст копию NSString в правой части назначения.Попробуйте запустить инструмент с утечками, чтобы проверить, не утечка ли у вас памяти.

0 голосов
/ 13 января 2011

Учитывая, что у вас есть генерация heapshot с нулевым распределением, это не является последовательным увеличением памяти.Это может быть кэширование [пошло не так], или это может быть утечка, связанная с прокруткой, что-то проваливающееся в трещины событий.

Что показывают итерации кучи с выделением в них?

...