Ios 是否使用GCD?

Ios 是否使用GCD?,ios,multithreading,user-interface,grand-central-dispatch,Ios,Multithreading,User Interface,Grand Central Dispatch,我有一个iPhone应用程序,它基本上是一个网站的移动应用程序。它所做的几乎所有事情都是从我们的服务器调用API方法。应用程序检索用户信息,并使用API不断更新服务器 我的同事和我讨论了是否将GCD引入应用程序的下载方面。我的同事认为,由于UI需要等待下载完成后才能显示图片、文本或其他内容,因此绝对不需要GCD。我的观点是,我们应该让主线程忙于UI呈现(即使没有数据),并将GCD引入应用程序以创建其他线程供下载 哪一个论点是正确的?在我的例子中,如果UI呈现时没有数据,会有某种延迟吗?哪个应用程

我有一个iPhone应用程序,它基本上是一个网站的移动应用程序。它所做的几乎所有事情都是从我们的服务器调用API方法。应用程序检索用户信息,并使用API不断更新服务器

我的同事和我讨论了是否将GCD引入应用程序的下载方面。我的同事认为,由于UI需要等待下载完成后才能显示图片、文本或其他内容,因此绝对不需要GCD。我的观点是,我们应该让主线程忙于UI呈现(即使没有数据),并将GCD引入应用程序以创建其他线程供下载


哪一个论点是正确的?在我的例子中,如果UI呈现时没有数据,会有某种延迟吗?哪个应用程序会更干净、更时尚、更快?

一个论点是:当下载失败并且由于服务器端出现问题而超时时,会发生什么情况

  • 如果没有GCD,应用程序将保持被阻止状态,并在一段时间后崩溃 由于用户界面被阻止的时间不能超过20秒,因此无法退出
  • 有了GCD,应用程序仍能正常工作,但不会有数据 正在下载,应用程序不会崩溃
需要考虑的其他方面包括:

  • 正在使用的对象的线程安全性
  • 如何处理由于用户离开页面而不再需要的下载

一个论点是:由于服务器端出现问题,下载失败并超时时会发生什么情况

  • 如果没有GCD,应用程序将保持被阻止状态,并在一段时间后崩溃 由于用户界面被阻止的时间不能超过20秒,因此无法退出
  • 有了GCD,应用程序仍能正常工作,但不会有数据 正在下载,应用程序不会崩溃
需要考虑的其他方面包括:

  • 正在使用的对象的线程安全性
  • 如何处理由于用户离开页面而不再需要的下载

    • 我认为在主线程中执行耗时的操作不是一个好主意

      即使用户在做任何有意义的事情之前必须等待数据被下载,他仍然不希望UI被阻止


      假设您有一个navigator视图,在用户点击某个按钮后,您将一个新视图推到该视图并开始下载某些内容。如果用户突然决定不想再等待,他会点击“后退”按钮。如果您的下载操作阻塞了UI,用户将不得不等待它结束,这真的很糟糕。

      我认为在主线程中执行耗时的操作不是一个好主意

      即使用户在做任何有意义的事情之前必须等待数据被下载,他仍然不希望UI被阻止


      假设您有一个navigator视图,在用户点击某个按钮后,您将一个新视图推到该视图并开始下载某些内容。如果用户突然决定不想再等待,他会点击“后退”按钮。如果您的下载操作阻塞了UI,用户将不得不等待它结束,这真的很糟糕。

      更合适的问题可能是您是否应该异步下载或在应用程序的主线程上下载,因为在iOS上有几种不同的异步下载方法(例如使用NSThread、NSOperation或GCD)。实现目标的一个简单方法是使用库。它使多线程网络/互联网代码非常易于实现和理解


      就我个人而言,我非常喜欢GCD,并建议您尽快学习它,尽管它本身并不适合异步下载,而像AFNetworking这样的库(我相信它是在后台使用GCD的)

      一个更合适的问题可能是,您应该异步下载还是在应用程序的主线程上下载,因为在iOS上有几种不同的异步下载方法(例如,使用NSThread、NSOperation或GCD)。实现目标的一个简单方法是使用库。它使多线程网络/互联网代码非常易于实现和理解


      就我个人而言,我非常喜欢GCD,并建议您尽快学习它,尽管它本身并不适合异步下载,而像AFNetworking这样的库(我相信它是在后台使用GCD的)

      下面是一篇关于使用NSOperationQueues(在后台使用GCD)下载图像的好文章。还有一些Github代码可以查看。他们有一个优雅的解决方案,当用户移动到应用程序的不同部分时,可以暂停下载并将新下载排队


      使用GCD/NSOperationQueues,而不是使用NSThreads。您将很好地学习核心基础知识,同时创建一个架构良好的应用程序。:)

      下面是一篇关于使用NSOperationQueues(在后台使用GCD)下载图像的好文章。还有一些Github代码可以查看。他们有一个优雅的解决方案,当用户移动到应用程序的不同部分时,可以暂停下载并将新下载排队


      使用GCD/NSOperationQueues,而不是使用NSThreads。您将很好地学习核心基础知识,同时创建一个架构良好的应用程序。:)

      一个单线程应用程序一次下载一个文件,并且不允许用户与现有数据/GUI交互,这太可怕了。你问这个问题是因为你不知道足够的GCD,看不出它对日常编码有多有用。@Jano我知道它有多有用。我经常用它。但我似乎无法说服我的同事,你应该始终实现对任何服务器的异步调用来下载数据,否则你就会将依赖进程强制进入应用程序的范围。我认为允许t对用户来说是公平的