快速从服务器加载数据iOS

时间:2017-01-04 09:19:10

标签: ios objective-c json

我正在开发一个购物应用程序,我使用Web服务来获取数据,即产品列表等。但是加载时间太长,因此我的应用程序非常慢。

这个问题有解决办法吗?

下面是我试图获取产品列表的代码。

NSURL * Url=[NSURL URLWithString:@"URL/api/product"]; 
NSData * Data=[NSData dataWithContentsOfURL:Url];
NSString *str=[[NSString alloc]initWithData:Data encoding:NSUTF8StringEncoding];
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:[strinng dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil]; 

无法放置JSON响应,因为它太多了。

5 个答案:

答案 0 :(得分:3)

此方法没有RIGHTWRONG方式。但是对于快速数据加载,我们可以考虑一些要点。我可以提到这些要点,还有许多其他要点:

  1. 使用AFNetworking(针对目标c)或Alamofire(针对swift),用于调用Web服务并获取响应。
  2. 不要在viewDidLoad中做太多事情。尽量少做操作。
  3. 您可以在viewDidLoadviewWillAppear中调用网络服务(每次访问屏幕时都会调用它)
  4. 在主线程上获得响应更新UI之后。请参阅this post。
  5. 如果要显示来自URL的图像,请异步加载。您可以使用SDWebImage等第三方库,也可以使用AFNetworkingAlamofire
  6. 中提供的扩展程序
  7. 如果要在列表中显示产品列表,请使用Load More功能。为此,您的API应该足够智能,使用pagination
  8. 实现
  9. 使用UITableViewUICollectionView显示可重复使用的组件。
  10. 直到现在我可以突出这些要点。如果我发现了其他任何内容,我会更新我的答案。

答案 1 :(得分:1)

如果你展示你为此做了什么会更好,但根据你的要求我会建议你,

  1. 使用AFNetworking与服务器通信,速度更快。

  2. 如果您在新ViewController中向服务器发送请求,请确保您要在viewWillAppear中发送请求。

  3. 尽量避免同时获取太多数据。

  4. 尝试使用Asynchronous请求意味着它不会等待。您使用异步意味着它不会等待。表示启动该操作的线程将在继续之前等待任务完成。

答案 2 :(得分:1)

只需使用NSURLSession即可。它是来自Apple的优秀API。只需记住在完成块中使用dispatch grand central get mainQueue来更新任何UI。

答案 3 :(得分:0)

在App启动(AppDelegate)时开始从API加载数据并将响应数据存储在模型中。这样可以减少时滞。您也可以尝试将响应保存到CoreData中,并在加载视图时刷新数据。

希望这有帮助。

答案 4 :(得分:0)

当您收到的数据丰富时,无法为您加快进程。

  1. 您应该拆分API,可能一个API会为您提供列表 产品。
  2. 制作API以便只发送请求数量的产品和 产品数量应根据您的手机屏幕分辨率而定 和那里可以展示的产品数量。例如,它 在iPhone 4上可能是4,而在iPhone 6上则是6。在滚动时再次调用该API以接收另外4或6个产品。
  3. 点击特定产品后,使用其他API获取产品 内容。