Tôi đang sử dụng lớp NSURLConnection
để tải xuống một tệp lớn trong ứng dụng iPhone của mình, nhưng nó thường xuyên gặp sự cố do sử dụng quá nhiều bộ nhớ. Tôi đang sử dụng cách sử dụng thông thường NSURLConnection
, để thêm dữ liệu đã nhận vào đối tượng NSMutableData
.Làm thế nào để tải xuống một tệp lớn với SDK iPhone và tránh các vấn đề về sử dụng bộ nhớ?
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.fileData appendData:data];
}
Sau đó, sau khi tôi hoàn thành tải về toàn bộ tập tin, tôi lưu nó vào một tập tin tạm thời của địa phương, và đọc nó như là một tập tin ánh xạ như thế này:
- (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];
}
tôi có thể cải thiện gì ở đây để tránh những vấn đề sử dụng bộ nhớ?
Tôi đã viết một thư viện cho rằng, tôi đặt nó ở đây hy vọng nó sẽ hữu ích cho một số người, hoặc truyền cảm hứng cho họ viết giải pháp riêng của họ. Nếu bạn là ok với nó tất nhiên. https://github.com/thibaultCha/TCBlobTải xuống – thibaultcha