У моего объекта есть частные элементы NSMutableArray. Я использую следующий код для сортировки объектов элементов в порядке размера:Устранить утечку памяти NSMutableArray
-(void)sortItems{
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"size" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [items sortedArrayUsingDescriptors:sortDescriptors];
NSMutableArray* newArray = [[NSMutableArray alloc] initWithArray: sortedArray];
[self setItems:newArray];
[sortDescriptor release];
}
Очевидно, что это утечка памяти здесь, потому что каждый раз, когда я называю sortItems, я allocing новой памяти и назначение чтобы указать на него. Я пытался выпускать старую память следующим образом:
NSMutableArray* newArray = [[NSMutableArray alloc] initWithArray: sortedArray];
NSMutableArray* oldArray = [self items];
[self setItems:newArray];
[oldArray release];
Но это дает ошибку EXC_BAD_ACCESS. Я прочитал об обработке памяти в objC, и я убежден, что я делаю что-то принципиально неправильное здесь.
Любая помощь была бы принята с благодарностью!
Показать реализацию/объявление метода 'setItems'. Это * должно * сохранить # newArray, то есть вам нужно '[newArray release]' сразу же после его вызова. – trojanfoe
на данный момент items is property: @property (неатомный, назначить) NSMutableArray * items; Думаю, мне нужно прочитать, когда использовать «сохранить» в флагах свойств! – JimmyB