问题标签 [grand-central-dispatch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2811 浏览

iphone - 在类方法中使用大型中央调度会导致内存泄漏

当视图控制器在我创建 gcd 队列的行调用我的模型类方法时,我得到了内存泄漏。有任何想法吗?

0 投票
4 回答
439 浏览

multithreading - 我可以假设计划在串行队列上运行的块都将在同一个线程上运行吗?

我正在为将使用 OpenGL 的 Mac OS 10.6 构建应用程序。我想将渲染离岸到辅助调度队列(而不是主线程)。

据我了解,我需要使用线程本地 OpenGL 上下文来完成我的图形工作。我的计划是在我的第一个块上获取对它的引用,然后一遍又一遍地重用同一个实例。

但是,调度队列和线程并不相同,Xcode 4 的调试器显示一个队列可以使用多个线程。因此,我不确定我正在做的事情是否安全(尽管我相信只有并行队列可以使用多个线程)。

是否可以保证发送到串行队列的所有块都发送到同一个线程?我是否应该获取当前的 OpenGL 上下文并将其分配给我NSOpenGLView的每一帧?

0 投票
2 回答
13461 浏览

iphone - 你可以在 GCD/dispatch_async 中使用 cancel/isCancelled 吗?

我一直在想,你可以在你用 GCD 启动的线程中使用 cancel/cancelAllOperations/.isCancelled 吗?

目前,我只是使用布尔值作为标志,来取消后台进程。

假设您想在后台进行大量处理,同时保持 UI 响应,以便您可以捕捉取消按钮(或动画显示处理器正在工作)。这是我们如何做到的......

CHECKER 只是检查标志是否为真......

这一切都完美无缺。

但是........是否可以在这种类型的 GCD 使用中使用 cancel/cancelAllOperations/.isCancelled?

这里有什么故事?干杯。


PS - 适用于使用此“六部分”背景模板的任何初学者。

请注意,正如 BJ 在下面强调的那样,每当您退出 bg 流程时...

你必须清理你打开的所有变量!

在我的习惯中,您必须分配所有变量、上下文、内存等,特别是在“setUpHere”中。你必须在“wrapUpH​​ere”中释放它们。(如果你在 BG 中越深入,这个习语就会继续有效。)

或者,完全按照 BJ 在他的示例中显示的那样做。(如果你使用BJ的方法,如果你深入的话要小心。)

无论您使用什么方法,当您退出 BG 进程时,都必须清理您打开的所有变量/上下文/内存。希望它可以帮助某人,有时!

0 投票
1 回答
1877 浏览

iphone - 为什么在使用全局调度队列时不调用 NSURLConnection 委托方法?

当我执行以下操作时:

委托的方法永远不会被调用。但是当我这样做时

他们确实会被叫到。为什么?

UPD

http://developer.apple.com/library/ios/#qa/qa1712/_index.html

现在我创建了 NSURLConnection;启动 NSURLConnection;在主线程上。

0 投票
3 回答
19635 浏览

objective-c - Grand Central Dispatch 的简单示例

我是 Mac 的新手编程,我对 Grand Central Dispatch 感到非常惊讶。我读到了这一点,看起来像是并行编程的完美解决方案。我使用 POSIX 线程并想转移到 GCD。

我在 Apple Developer Connection 中看到了示例代码,但这让我很困惑。我搜索了一个带有两个线程的简单示例,但我找不到它。

如何使用 GCD 执行此示例代码???

提前致谢

0 投票
4 回答
18954 浏览

objective-c - 释放 GCD 调度队列属性的正确方法是什么?

我正在使用通过其所有者的属性访问的 dispatch_queue,如下所示:

注意assign关键字。队列在对象的整个生命周期中使用,因此归对象所有。当拥有对象被释放时,我释放队列:

我如何正确释放这个?会使用retain/release工作吗?

如果在调用释放时队列中有待处理/正在运行的东西会发生什么?

0 投票
1 回答
13241 浏览

multithreading - 比较 GCD 与 performSelectorInBackground:dispatch_async 不在后台

Grand Central Dispatch 很棒,可以减少代码量,但为什么我不能在后台线程上运行一些东西?
我制作了一个示例应用程序来说明我的意思(没有评论工作):

[NSThread sleepForTimeInterval:3];是模拟一个默认的 UI 功能。例如,如果有人从一个导航视图切换到另一个。
只需在新的基于视图的应用程序中复制代码,创建两个按钮并将它们连接起来。

0 投票
2 回答
1842 浏览

iphone - 块和 ViewController 线程安全

我一直在查看 Game Center 代码示例GKTapper以及开发人员对其实现的评论对我来说没有太大意义的部分。代码插入下面。我不明白为什么在主线程上调度一个修改视图控制器的块不安全?

他提到“如果在辅助队列上执行的块中引用了视图控制器,那么它可能会在主队列之外释放。即使实际块被调度在主线程上也是如此。” 如果处理发布的代码在主 UI 线程上(在主运行循环上),这怎么可能?还是我没有得到 Blocks/GCD 的东西?

更让我好奇的是他的解决方案是如何解决这个问题的。“因为‘callDelegate’是访问委托的唯一方法,所以我可以确保委托在我的任何块回调中都不可见。” (这里的委托是一个视图控制器)

有人能告诉我这整件事吗?我对块和 GCD 很陌生,所以也许我错过了一些简单的东西......

0 投票
1 回答
391 浏览

haskell - Haskell、FFI 和 Grand Central Dispatch?

我正在考虑一种函数式语言,它可以在 FreeBSD、OSX、iOS 下与我的 C/Objective-C 环境很好地配合使用。看起来我最好的选择是为特定函数创建函数式语言库,用 Haskell 编写,使用 GHC 编译,并使用 FFI 将此函数式代码作为标准 C 调用调用。

我的问题是,在这种情况下如何处理并发? 使用函数式语言的一个动机是,对于我想要对不可变数据集进行操作的问题,我想要进行大量的并行化。但是,使用我在这里详述的方法,我会得到任何并行化吗?看来我可以编译并指定使用 2 个线程,但是有没有办法使用 GCD 而不是线程(出于所有原因 GCD 比线程好,例如每个平台自动扩展的并行化量)?或者,正如我所描述的那样使用 FFI,我是否完全失去了多线程的能力?

这种语言似乎最适合我正在尝试做的事情,但我想在我投入大量时间真正学习它之前了解它是否合适

0 投票
2 回答
2099 浏览

iphone - NSManagedObjectContext 和 GCD

来自 Apple 的核心数据编程指南

您应该为每个线程提供其自己的完全私有的托管对象上下文,并在每个线程的基础上保持其关联的对象图分离。

这如何扩展到 Grand Central Dispatch,您完全无法控制以您的名义自动创建的线程?

我现在的做法是NSManagedObjectContext为每个调度队列设置一个,但这就是问题所在:调度队列不一定每次都使用同一个线程,对吧?