iPhone - утечки памяти в NSSortDescriptor - PullRequest
0 голосов
/ 27 февраля 2011

Я получаю утечки памяти, используя следующий код:

Интерфейс:

@property (nonatomic, retain) NSArray *sortedItems;

Реализация:

NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"ScannedDate" ascending:NO] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [self.items sortedArrayUsingDescriptors:sortDescriptors];
self.sortedItems = [NSArray arrayWithArray:sortedArray]; // memory leak 100% here

- (void)viewDidUnload {
  self.sortedItems = nil;
  [super viewDidUnload];
}

- (void)dealloc {
  [sortedItems release];
  [super dealloc];
}

1 Ответ

0 голосов
/ 27 февраля 2011

Ну, вы создаете два ненужных массива.

Замените это:

NSArray *sortedArray = [self.items sortedArrayUsingDescriptors:sortDescriptors];
self.sortedItems = [NSArray arrayWithArray:sortedArray]; // memory leak 100% here

... этим:

self.sortedItems = [self.items sortedArrayUsingDescriptors:sortDescriptors];

Каждый раз, когда вы создаете массив, вы отправляете retain объектам, которые хранятсяпо массиву.Если массив автоматически освобождается (что создают удобные методы, описанные выше), то точка, в которой отправляются их сообщения release, не контролируется программистом.Это может привести к очевидным утечкам в зависимости от обстоятельств во время выполнения.

...