Sto utilizzando la classe NSURLConnection
per scaricare un file di grandi dimensioni nell'applicazione iPhone, ma si blocca ogni tanto perché utilizza troppa memoria. Sto facendo il solito uso di NSURLConnection
per aggiungere i dati ricevuti a un oggetto NSMutableData
.Come scaricare un file di grandi dimensioni con l'iPhone SDK ed evitare problemi di utilizzo della memoria?
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.fileData appendData:data];
}
Poi dopo aver finito di scaricare l'intero file, ho salvarlo in un file temporaneo locale e leggerlo come un file mappato in questo modo:
- (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];
}
Cosa posso migliorare qui per evitare questi problemi di utilizzo della memoria?
Ho scritto una libreria per questo, sto mettendo qui sperando che sia utile per alcune persone, o ispirare loro a scrivere la propria soluzione. Se stai bene, ovviamente. https://github.com/thibaultCha/TCBlobDownload – thibaultcha