gpt4 book ai didi

ios - 从服务器下载数据并在 UITableViewController 或 UIViewController 中显示而不会卡住其 GUI 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 10:54:35 25 4
gpt4 key购买 nike

从服务器下载数据有多种结构。喜欢

  1. ViewDidLoad 创建 NSURLConnection,调用其委托(delegate),当连接结束时,创建解析器和解析器数据,然后保存到数据库。 (同一个类(class)的一切)

另一种方式是

  1. 创建一个单独的类,它将管理所有 NSURLConnections + NSXMLParser,并在 ViewDidLoad任何其他方法<中创建该类的对象 的 ViewController 类。

另一种方式是

  1. 制作一个文件来设置连接,制作另一个文件来管理解析器

     ViewController =====================>> URLConnection
    Delegate of URLConnectionfile =====================>> ViewController

然后,在这个委托(delegate)中,将从服务器下载的 NSData 进一步发送到 Parser 类

   ViewController =======================>> ParserClass
Delegate of Parser gives Array to ================= ViewController

然后显示那个数组

另一种方法是使用线程

  1. 调用此类方法

    [self performSelectorInBackground:@selector(doSomething) withObject:nil];

然后在 doSomething 中调用你的连接文件

任何人都可以定义以一种非常有条理和正确的方式下载和保存的最佳方式,以便它变得易于管理并且不会发生 View 挂起。

最佳答案

不要在主线程上运行您的下载和解析代码。这是避免 UI 卡住的唯一方法

推荐方式,

  1. NSOperationNSOperationQueue
  2. GCD
  3. 使用第 3 方框架,如 AFNetworkingMKNetworkKit 等。

此外,如果您的 TableView 中有图像,请使用称为延迟加载的技术。

我建议不要使用 [self performSelectorInBackground:@selector(doSomething) withObject:nil];。如果您不知道如何使用,而是使用 GCD,它会变得困惑。


编辑

通常,我所遵循的,

  • 使用 NSOperationNSOperationQueue 处理 Web 服务调用的 Web 服务引擎类(您可以使用 GCD 或其他框架)。任何调用 WS 的 View Controller 都会与此类对话。
  • 解析器类将从 Web 服务引擎接收 WS 响应。它将解析响应并创建模型类。完成后,它将把解析后的响应委托(delegate)给 Web 服务引擎,然后从这里委托(delegate)给 View Controller 。
  • 错误处理和进度指示在 Web 服务引擎中处理。
  • 重要:从 View Controller 发出请求的地方,处理发生在 NSOperationQueue 创建的后台线程上。因此不会卡住 UI。

viewDidLoad 中启动对 WS 的调用,并显示进度指示器,直到过程完成。但有时要求在下载 WS 响应之前不会创建 View Controller 。所以选择发起请求是根据你的要求。

关于ios - 从服务器下载数据并在 UITableViewController 或 UIViewController 中显示而不会卡住其 GUI 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19002859/

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