我正在尝试从服务器加载大文件,但是当它加载时总是很慢。 你能建议我方法,如何快速加载,然后200k对象?
Printing description of data:
(NSData *) data = 0x08e51d80 151341098 bytes
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if (error)
{
NSLog(@"Error,%@", [error localizedDescription]);
}
else
{
NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]);
}
}];
答案 0 :(得分:0)
切换到JSON。 JSON将比XML更快地加载和解析MUCH。我有一个1.8 MB的JSON文件,它在大约7秒内下载并解析(我使用AFNetworking进行连接)。另一个提示,将生成的NSArray缓存在设备上,以便下次可以直接从该缓存的数组加载,并在后台再次请求该文件并与缓存的数组进行比较。如果不同,请使用新数据更新模型。
这样的事情:
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (!error) {
NSError *error = nil;
id jsonObj = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
}
}
else {
NSLog(@"Error,%@", [error localizedDescription]);
}
}];
答案 1 :(得分:0)
两点:
NSData
保留在内存中。例如,AFNetworking支持此类选项。NSXMLParser
支持流解析。以下是设置NSXMLParser
的示例:
NSInputStream *fileStream = [NSInputStream inputStreamWithURL:temporaryXMLFileURL];
NSXMLParser *parser = [[NSXMLParser alloc] initWithStream:fileStream];
parser.delegate = yourParserDelegate;
BOOL result = [parser parse];
您可以实现解析&采用NSXMLParserDelegate
的类中的对象实例化代码,互联网上有很多例子,甚至来自Apple的one。
请注意,所有这些技巧都不会加速从互联网上下载大文件,这完全取决于您的连接速度。我的方法只会有助于减少应用程序内存占用(从而降低因内存压力而导致应用程序被iOS抛弃的风险)。