Проблема в том, что вы никогда не удаляете UILabel из Status UIView. Давайте посмотрим на количество ваших удержаний в drawRect:
(void)drawRect:(CGRect)rect {
title =[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 12.0f)];
Здесь вы создали UILabel с alloc, который создает объект с счетом сохранения 1.
[self addSubview:title];
[title release];
Добавление представления UILabel в Status увеличивает количество сохраняемых заголовков до 2. В следующем выпуске счетчик окончательных сохранений равен 1. Поскольку объект никогда не удаляется из своего суперпредставления, объект никогда не освобождается.
По сути, вы добавляете одну UILabel поверх другой, каждый раз, когда срабатывает таймер, пока не закончится память.
Как предлагается ниже, вам, вероятно, следует создать UILabel один раз при загрузке представления и просто обновить текст UILabel с помощью [model n].
В качестве служебной записки вы можете также убедиться, что вы правильно удаляете все оставшиеся объекты в ваших методах dealloc. 'model' и 'title' должны быть освобождены в dealloc Status ', точно так же, как' model 'должна быть в SbarLeakAppDelegate.
Надеюсь, это поможет.
Редактировать [1]:
Похоже, у вас проблема с памятью довольно хорошо решена на данный момент. Я просто хотел предложить другую альтернативу двум таймерам, которые вы используете.
Таймер, который вы используете в своем объекте Status, срабатывает каждые 0,2 секунды. Таймер, который фактически увеличивает значение «модели», n, срабатывает только один раз каждую секунду. Хотя я полагаю, что вы делаете это для обеспечения более регулярной «частоты обновления» представления «Состояние», вы потенциально можете перерисовывать представление 4 или 5 раз в секунду без изменения данных. Хотя это может быть незаметно, поскольку представление довольно простое, вы можете рассмотреть что-то вроде NSNotification.
С помощью NSNotification вы можете сделать так, чтобы объект Status "наблюдал" за определенным видом уведомлений, которые будут генерироваться Моделью при изменении значения n. (в этом случае примерно 1 в секунду).
Вы также можете указать метод обратного вызова для обработки уведомления при его получении. Таким образом, вы будете вызывать -setNeedsDisplay только тогда, когда данные модели действительно были изменены.