gpt4 book ai didi

iphone - 如何使用iPhone SDK下载大文件并避免内存使用问题?

转载 作者:行者123 更新时间:2023-12-03 18:19:06 24 4
gpt4 key购买 nike

我正在使用 NSURLConnection 类在 iPhone 应用程序中下载一个大文件,但它经常崩溃,因为它使用了太多内存。我正在执行通常的 NSURLConnection 用法,将接收到的数据附加到 NSMutableData 对象。

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

然后,当我下载完整个文件后,我将其保存到本地临时文件,并将其作为映射文件读取,如下所示:

- (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];
}

我可以在此处进行哪些改进来避免这些内存使用问题?

最佳答案

- (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];

}

关于iphone - 如何使用iPhone SDK下载大文件并避免内存使用问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/623735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com