【问题标题】:Delegate alternative for updating progress代表更新进度的替代方案
【发布时间】:2014-09-01 09:01:20
【问题描述】:

我目前正在使用 Objective C 开发一个 OSX 项目,该项目具有某种基于块的结构,如下所示:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
    // SYNCHRONOUS task
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI update
    });
});

它工作得非常好,并且在代码的同一部分中具有后台任务和 UI 更新使其更具可读性。但是我现在需要更新进度控件,我知道我可以通过使用委托模式来做到这一点,但我想知道是否有其他更好的方法来做到这一点。

有什么想法吗?

【问题讨论】:

  • 你在用 NSURLConnection 下载东西吗?
  • 不,同步任务有点复杂,需要几个网络连接作为客户端和服务器,还需要一些处理......
  • 我无法为您的任务提供特定的建议,但您可以在代码中的某处创建块变量,并在每次下载进度更新时调用该块。
  • 不太清楚你在问什么,但是你熟悉KVO吗?如果没有,为什么不花点时间在 iOS 中学习一下呢?这是一个非常重要的问题,可能会对您有很大帮助。
  • 是的,我知道 KVO,但我正在尝试找到一种解决方案,使代码更具可读性,这可能是一个品味问题,但我认为代表/通知/KVO 非常难以阅读范式,但我认为我将不得不与代表一起进行。还是非常感谢。 :-)

标签: ios objective-c macos delegates objective-c-blocks


【解决方案1】:

只需使用相同的 UI 更新代码,除了通过 dispatch_sync 调用它:

// In background thread...
dispatch_sync(dispatch_get_main_queue(), ^{
    // Do UI update
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-14
    • 2014-10-22
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2018-12-11
    • 2012-07-05
    • 2012-01-23
    相关资源
    最近更新 更多