sistema liberar google espacio descargar cómo como archivos archivo iphone memory-management nsurlconnection

liberar - ¿Cómo descargar un archivo grande con el iPhone SDK y evitar problemas de uso de memoria?



liberar espacio iphone 7 (3)

Estoy usando

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:save_name]; NSFileHandle *file1 = [NSFileHandle fileHandleForUpdatingAtPath: filename]; [file1 writeData: data]; [file1 closeFile]; }

Estoy usando la clase NSURLConnection para descargar un archivo grande en mi aplicación de iPhone, pero se cuelga de vez en cuando porque usa demasiada memoria. Estoy haciendo el uso habitual de NSURLConnection , para anexar los datos recibidos a un objeto NSMutableData .

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.fileData appendData:data]; }

Luego, cuando termine de descargar todo el archivo, lo guardo en un archivo temporal local y lo leo como un archivo mapeado como este:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { // save the downloaded data into a temporary file NSString *tempPath = NSTemporaryDirectory(); NSString *tempFile = [tempPath stringByAppendingPathComponent:@"temp.pdf"]; [self.fileData writeToFile:tempFile atomically:YES]; NSData *mappedData = [NSData dataWithContentsOfMappedFile:tempFile]; NSURL *baseURL = [NSURL URLWithString:@"http://mydomain.com"]; [webView loadData:mappedData MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:baseURL]; }

¿Qué puedo mejorar aquí para evitar estos problemas de uso de memoria?


Si es tan grande, ¿por qué no escribirlo en el archivo tal como aparece, en lugar de guardarlo en un objeto NSData?


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*)response { filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:save_name]; // filename is in .h file [[NSFileManager defaultManager] createFileAtPath:filename contents:nil attributes:nil]; file = [[NSFileHandle fileHandleForUpdatingAtPath:filename] retain];// file is in .h //if (file) { // // [file seekToEndOfFile]; // } } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSD ata *)data { if (file) { [file seekToEndOfFile]; } [file writeData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection*)connection { [file closeFile]; }