【发布时间】: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