Używam klasy NSURLConnection
, aby pobrać duży plik w mojej aplikacji na iPhone'a, ale ulega awarii co jakiś czas, ponieważ używa zbyt dużo pamięci. Używam zwykłego użycia NSURLConnection
, aby dołączyć odebrane dane do obiektu NSMutableData
.Jak pobrać duży plik za pomocą zestawu iPhone SDK i uniknąć problemów z używaniem pamięci?
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.fileData appendData:data];
}
Następnie po skończeniu pobierania całego pliku, zapisać go do lokalnego pliku tymczasowego i odczytać go jako odwzorowanym pliku jak poniżej:
- (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];
}
Co mogę poprawić, żeby uniknąć tych problemy z używaniem pamięci?
pisałem bibliotekę do tego, Kładę go tutaj w nadziei, że będzie użyteczny dla niektórych ludzi, lub zainspirować je pisać własne rozwiązanie. Jeśli oczywiście nie masz nic przeciwko temu. https://github.com/thibaultCha/TCBlobDownload – thibaultcha