帮助在iOS上的multithreading?

我有一个使用OpenEars和Flite库的应用程序。 问题是Flite库是资源密集型的,它冻结了我的应用程序。 我怀疑在后台线程上运行Flite会解决问题,但我知道如何去做。

这就是说, 我如何在iOS中实现后台线程

我会很感激,如果有人能指点我一些教程,分享一些示例代码,或任何一般的build议,可以帮助我解决这个问题。

苹果的并发编程指南是一个不错的阅读。 并发编程不是你可能想要从networking上复制一些示例代码和黑客直到你快乐。 了解避免麻烦的select和原则是很好的。


一段时间后重新回答,现在你几乎不会用大中央调度出错。 在后台运行任务如下所示:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self doSomeLongTask]; // 1 dispatch_async(dispatch_get_main_queue(), ^{ [self longTaskDidFinish]; // 2 }); }); 

长期任务(1)将在一些后台线程上运行,并且没有我知道的捕获,即。 在那个线程中已经有了一个autorelease池,你不必关心运行循环等等。在任务完成之后,代码在主线程(2)上调用-longTaskDidFinish ,这样你就可以更新UI或其他任何东西。 这是一个常用的习惯用语。

也许最好的办法是从苹果的教程 。 我仔细阅读(10-20分钟)和“线程”我所有的应用程序! 优秀!

Swift 3

 DispatchQueue.global(qos: .userInteractive).async { // Code to run on background thread // Switch to the main UI thread to display any results needed DispatchQueue.main.async { // Run code on main UI thread here } } 

qos参数代表“服务质量”。 把它看作是给你的背景线索的优先事项:

  • .userInteractive (最高优先级)
  • .userInitiated (当你可以腾出几秒钟)
  • .utility (当你可以.utility几秒到几分钟)
  • .background (最低优先级 – 分钟/小时备用)