Помощь с утечкой памяти iPhone - PullRequest
1 голос
/ 19 января 2010

Этот код имеет утечку, инструмент производительности обвиняет две утечки в этом блоке кода. Если я это прокомментирую, утечки не произойдет. Буду очень признателен за любую помощь, закрепив ее.

Утечка:

Malloc 48 байтов

NSCFarray 32 байта

Кодовый блок:

    NSArray *myArray = [[NSArray alloc] initWithObjects: @"Add", @"Edit", nil];
    segmentControl = [[UISegmentedControl alloc] initWithItems:myArray];
    [myArray release];
    [segmentControl setSegmentedControlStyle:UISegmentedControlStyleBar];
    [segmentControl setMomentary:YES];
    [segmentControl addTarget:self action:@selector(addOrEditPressed) forControlEvents:UIControlEventValueChanged];
    UIBarButtonItem *myBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:segmentControl];
    self.navigationItem.rightBarButtonItem = myBarButtonItem;
    [myBarButtonItem release];

Ответы [ 5 ]

1 голос
/ 19 января 2010

Пока segmentControl равно nil, когда вы вводите кодовый блок и освобождается где-то еще в вашем коде (например, dealloc или viewDidUnload), вы ничего не делаете неправильно.

Вы пытались запустить свой код под статическим анализатором (меню Xcode: Build | Build & Analyze)?

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

1 голос
/ 19 января 2010

Сегмент-контроль предназначен для выпуска?

0 голосов
/ 19 января 2010

СегментКонтроль - это свойство? Вы обнуляете это в viewDidUnload?

0 голосов
/ 19 января 2010

При создании массива выделение не требуется.

NSArray * myArray = [[NSArray alloc] initWithObjects: @ "Add", @ "Edit", ноль];

Использование:

+ (id)arrayWithObjects:(id)firstObj, ...

Попробуй так, для этого тоже не нужно release.

0 голосов
/ 19 января 2010

Счетчик сохранения myArray по-прежнему один после этого раздела кода.Когда вы добавляете его в initWithItems для созданияgmentControl, он теперь имеет ссылку на объект.

Возможно, это утечка?

...