Уменьшение пиковой нагрузки на память
Как правило, рекомендуется избегать генерации автоматически выпущенных объектов.
[Большая часть этого абзаца изменена с на этот вопрос .] Поскольку вы обычно (1) не имеете прямого контроля над их временем жизни, автоматически выпущенные объекты могут сохраняться в течение сравнительно длительного времени и излишне увеличивать память след вашей заявки. В то время как на рабочем столе это может иметь незначительные последствия, на более ограниченных платформах это может быть серьезной проблемой. Поэтому на всех платформах, и особенно на более ограниченных платформах, вам, по возможности, не рекомендуется использовать методы, которые могут привести к автоматическому освобождению объектов, и вместо этого рекомендуется использовать шаблон alloc / init.
Я бы предложил заменить это:
theData = [NSData dataWithContentsOfFile:inFile];
с:
theData = [[NSData alloc] initWithContentsOfFile:inFile];
затем в конце метода добавьте:
[theData release];
Это означает, что theData
будет освобожден до выхода из метода.
Вы должны в конечном итоге:
- (void)readVenueArchiveFile:(NSString *)inFile key:(NSString *)inKey
{
NSMutableData *theData;
NSKeyedUnarchiver *decoder;
theData = [[NSData alloc] initWithContentsOfFile:inFile];
decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:theData];
ListClassName *decodedList = [decoder decodeObjectForKey:inKey];
self.venueIOList = decodedList;
[decoder finishDecoding];
[decoder release];
[theData release];
}
Это делает семантику управления памятью понятной и восстанавливает память как можно быстрее.
(1) Вы можете получить контроль, используя свои собственные локальные пулы автоматического выпуска. Подробнее об этом см. Руководство по программированию управления памятью Apple .