拉入JSON数据的速度比dataWithContentsOfURL更快吗?

时间:2014-06-27 03:15:04

标签: objective-c json rest optimization nsdata

我正在构建一个需要JSON数据的应用。我正在使用RESTful API的get调用,并使用和NSJSONSerialization来查看数据。为了减少启动时间,我正在记录完成所需的所有时间。在围绕此代码输入以下日志语句后,我注意到这个单个调用平均需要5秒才能完成。这次我能改进的任何方式吗?我只通过JSON获得了100个帖子,所以我无法想象这是它可以移动的最快。这是代码:

NSLog(@"Data Retrieval STARTED");
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:getURL]];
NSLog(@"Data Pull ENDED");

当我查看日志时,第一个Log语句和第二个语句总是相隔5秒,所以这是我的测试,不像Time Profiler那样准确,但我相信它。提示很感激。

2 个答案:

答案 0 :(得分:1)

您应该使用curl(或类似)基线来比较5秒时间。在此之前,我认为它是服务器+交易,没有什么特别的与iOS相关。

无论如何,无论延迟如何,当应用程序阻止时,远程请求太长而无法同步执行。相反,首先要定义UI在请求期间可以执行的有趣/有用的事情(也许它只是一个微调器,或者可能是其他启动任务。请考虑周到这一点)。然后从NSURLRequest创建NSURL,并使用以下内容将其传递给NSURLConnection

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

在完成功能块中,解析响应并将您的用户界面恢复为" ready"。

答案 1 :(得分:0)

您可以改用dataWithContentsOfURL:options:error:。对于选项参数,传入NSDataReadingUncached,如果您的数据只被读取一次然后被丢弃,这将提高性能

第二个解决方案:

事先使用NSUrlConnection打开连接,然后当您获得JSON文件时,没有额外的时间来首先打开连接。