цель c утечкой NSNumber сохраняется - PullRequest
0 голосов
/ 02 июня 2011

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

latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] retain];

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

Я понимаю парадигму alloc-release, но я все еще не уверен, как это исправить.

Ответы [ 2 ]

4 голосов
/ 02 июня 2011

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

Чтобы сделать это легко, я рекомендую установить его как @property и использовать self.latitude = [NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]];.Обратите внимание, что удержание больше не используется в назначении.Предполагается, что для вашей собственности установлен флаг retain, и она сохраняется для вас.

Т.е.

@property (nonatomic, retain) NSNumber *latitude

0 голосов
/ 02 июня 2011

Не видя остальной части вашего кода, сложно сказать, как именно вы должны это исправить, но первым хорошим подходом может быть попытка его автоматического высвобождения, например:

latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] autorelease];

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

...