Я загружаю с сервера несколько gzip-файлов xml, сохраняю их в папку документов и распаковываю каждый файл. После этого я удаляю файл .gz. Я делаю это в цикле для более или менее 500 файлов. Когда я использую инструменты, я вижу, что живые байты после этого процесса составляют более или менее 470 МБ. Когда я жду несколько секунд, ARC очищает его, и приложение переходит к 5 МБ живых байтов. Но поскольку это процесс синхронизации, мое приложение получает предупреждение о памяти сразу после этого, когда я не останавливаюсь после загрузки и распаковки. По крайней мере, я думаю, что должна быть возможность заставить ARC освободить память? Или у меня действительно плохой код, и я просто до сих пор этого не вижу?
Любая помощь или подсказка очень ценятся.
Скачивание и распаковка:
for(NSString *filePath in filePaths){
NSString *localPath = [[DownloadManager sharedInstance] downloadFile:filePath];
if(localPath){
//downloaded correctly
if([self unzipFileAtPath:localPath]){
[FileUtility deleteFileAtPath:localPath];
}
}
}
Метод распаковки:
+ (BOOL)unzipFileAtPath:(NSString *)path
{
NSData *gzData = [NSData dataWithContentsOfFile:path];
NSData *ungzippedData = [gzData gunzippedData];
BOOL success = [ungzippedData writeToFile:[FormatUtility pathWithoutGz:path] atomically:NO];
ungzippedData = nil;
gzData = nil;
return success;
}