Утечка памяти в этом коротком методе - PullRequest
0 голосов
/ 02 сентября 2011

Instruments сообщает обо всех утечках этого VC в этом методе. Что может быть причиной? Я думаю, что это выделение, но не знаю, почему течет.

- (void)loadViewContent
{
    switch (self.currentView) 
    {
        case 0:
            self.title = @"Title 1";
            [self.navigationItem.backBarButtonItem release]; //para evitar un memory leak
            self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Blood" style:UIBarButtonItemStylePlain
                                                                                     target:nil action:nil] autorelease];

            [tableContent addObject:@"0"];
            [tableContent addObject:@"1 - 49"];
            [tableContent addObject:@"50 - 75"];
            [tableContent addObject:@"76 - 89"];
            [tableContent addObject:@"More than 89"];
            break;

        case 1: 
            self.title = @"Title 2";
            [self.navigationItem.backBarButtonItem release]; 
            self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Resp. Rate" style:UIBarButtonItemStylePlain
                                                                                     target:nil action:nil] autorelease];

            [tableContent addObject:@"0"];
            [tableContent addObject:@"1 - 5"];
            [tableContent addObject:@"6 - 9"];
            [tableContent addObject:@"More than 29"];
            [tableContent addObject:@"10 - 29"];
            break;

        default:
            break;
        }
    }

enter image description here

Заранее спасибо!

1 Ответ

2 голосов
/ 03 сентября 2011

Следующий код определенно пропускает (при условии, что модель памяти копирует или сохраняет в свойстве tableContent):

self.tableContent = [[NSMutableArray alloc] init];

Установщик tableContent освободит старое значение и сохранит / скопирует / назначит новое значение,Рассмотрим утверждение типа:

self.tableContent = [NSMutableArray array];

Это совершенно верно, потому что [массив NSMutableArray] является автоматически выпущенным объектом.Последующее использование self.tableContent работает только после этого, потому что установщик tableContent увеличивает счетчик сохранения, предотвращая освобождение tableContent.

Ваш код (как бы странно это ни выглядело) должен выглядеть следующим образом:

self.tableContent = [[NSMutableArray alloc] init];
[self.tableContent release];

ИЛИ - требует использования автоматически выпущенного объекта, которого некоторые разработчики хотели бы избежать, где это возможно

self.tableContent = [[[NSMutableArray alloc] init] autorelease];

ИЛИ - использует ненужную временную переменную для пояснения управления памятью

NSMutableArray * tempArr = [NSMutableArray alloc];
self.tableContent = tempArr;
[tempArr release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...