サーバーからいくつかのgzip圧縮されたxmlファイルをダウンロードし、それをドキュメントフォルダーに保存して、すべてのファイルを解凍します。その後、.gzファイルを削除します。私はそれを500ファイル程度のループで行います。機器を使用している場合、このプロセスの後、ライブバイトは多かれ少なかれ470MBであることがわかります。Imが数秒待つと、ARCはそれをクリアし、アプリケーションは5MBのライブバイトになります。しかし、同期プロセスであるため、ダウンロードと解凍の後で停止しないと、アプリはその直後にメモリ警告を受け取ります。少なくとも、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;
}