Статический анализатор XCode сообщает об утечке памяти при выделении переменной экземпляра - PullRequest
0 голосов
/ 02 ноября 2011

Используя XCode 4.2, я использую статический анализатор для кода, подобного следующему:

@interface ArrayDimensions: NSObject
{
   ArrayIndex *dims;
}
-(id) init: (int *)dims_;
@end

@implementation ArrayDimensions

-(id) init: (int *)dims_
{
   self = [super init];
   if(self)
      dims = [[ArrayIndex alloc] make:dims_];
   return self;
}
@end

Статический анализатор сообщает, что «метод возвращает с счетом удержания +1» и что «Объект утек: выделенный объект не указан в этом пути выполнения ".Это общий тип предупреждений во всем моем коде, и в каждом случае может показаться, что анализатор не может распознать, что я устанавливаю значение переменной экземпляра.

У меня вопрос: действительно ли у меня утечка памяти или анализатор неправильный?

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011

Анализатор ожидает, что методы возвращают автоматически освобожденный объект, если только они не являются парой alloc / init или не имеют copy в имени, в соответствии с рекомендациями Objective-C по присвоению имен методам.Попробуйте изменить имя метода инициализации с make: на initWithDimensions: и посмотрите, избавится ли оно от предупреждения.

0 голосов
/ 02 ноября 2011

Вам нужно выпустить ArrayIndex в методе dealloc. Также не рекомендуется вызывать метод после alloc, который не начинается с init, что является плохой практикой и может привести к путанице в статическом анализаторе.

Вот что вам нужно добавить в реализацию ArrayDimensions, чтобы предотвратить фактическую утечку.

-(void)dealloc
{
    [dims release];
    [super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...