【问题标题】:what is the best way for communication between threads in ios using swift?使用swift在ios中的线程之间进行通信的最佳方式是什么?
【发布时间】:2016-07-11 06:19:18
【问题描述】:

在并发线程中以阻塞方式执行某些逻辑的最佳做法是什么(例如,dispatch_sync(MyConcurrentQ) -//DB 连接) - 并以阻塞方式轮询主队列中的完成情况,所以仅在并发线程完成后才显示下一个视图?

【问题讨论】:

  • 单例不能替代您提到的任何通信方法。单例使对象 A 可以获取对其他对象 B 的引用,但它不提供在对象 A 中执行某些代码以响应对象 B 的更改的方法。对象 A 需要轮询 B 的属性,寻找变化,这不是一个好主意。顺便说一句,您链接到的那个“单例”示例是我见过的最糟糕的代码。它创建了越来越深的视图控制器嵌套,并鼓励使用全局变量(无论如何都不是全局变量)
  • 我正在使用第 3 方框架建立与某个数据库的连接,我需要显示进度条,直到我的连接成功建立,该框架有 void API 和一个 ConnectionListener,我从中设置了我的全局变量“Done = True”并在我的 ViewController 中轮询它以关闭进度条,实现这一点的最佳实践是什么,我仍然是 swift iOS 世界的初学者
  • NSNotification 与线程?不。 stackoverflow.com/questions/15968430/…
  • 查看NSOperationNSOperationQueue。它们是 GCD 的高级包装器,允许您添加依赖项并配置最大级别的并发性。如果您需要更多帮助,请查看WWDC 2015 video

标签: ios swift singleton global-variables grand-central-dispatch


【解决方案1】:

我在苹果文档中找到了答案 Apple 关于该主题的文档说:“常规通知中心在发布通知的线程上发送通知。[...] 有时,您可能需要在由您确定的特定线程上发送通知,而不是在通知中心。[...] 在这些情况下,您必须捕获在默认线程上传递的通知,并将它们重定向到适当的线程。” https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Notifications/Articles/Threading.html#//apple_ref/doc/uid/20001289-CEGJFDFG

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2018-05-24
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多