问题标签 [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 投票
9 回答
8441 浏览

objective-c - 我在哪个 GCD 队列上运行,无论是否是主队列?

我正在尝试编写一些线程安全的方法,所以我正在使用:

但是如果我在不必要的主线程上,我可以跳过所有那些调度调用,所以我想知道我目前在哪个线程上。我怎么知道这个?

或者,也许这样做并没有什么不同(在性能上)?

做这个比较好吗?

0 投票
1 回答
716 浏览

cocoa-touch - UIImage imageWithData泄漏(GCD)

嗨,我收到来自 Instrument 的报告泄漏,代码如下。

Leaks 报告我的 image = [UIImage imageWithData:imageData] 泄漏,有什么想法吗?对于自动释放的 UIImage 对象,我需要一个 NSAutoreleasePool 吗?

顺便说一句,如果有关系,我声明了 __block UIImage *image = nil; 上面是因为我在输入上面的代码之前检查了 ImageCache 中的图像。

0 投票
2 回答
2675 浏览

objective-c - 为什么 Cocoa 游戏避免使用 Grand Central Dispatch 来创建计时器?

我在互联网上看到了很多关于在 Cocoa 中创建游戏循环的讨论。我见过的大多数游戏循环都使用 NSTimer 每 60 秒触发一次事件。为什么似乎没有使用 Grand Central Dispatch 的示例,例如下面 Apple 开发人员文档中的源代码。有没有我不知道的问题?

0 投票
2 回答
2771 浏览

objective-c - 多线程和自动释放池

当我通过 GCD 掌握多线程技术时,我遇到了一些问题。假设您有以下方法:

我想知道这是否正确,因为我认为我应该在块执行之前保留字符串:实际上我担心事件循环完成并在块中string使用之前发送一条自动释放消息string。那会使程序崩溃。

我对吗?我应该发送保留和释放消息string还是这是正确的实现?提前致谢!

0 投票
3 回答
11824 浏览

iphone - 在 Grand Central Dispatch 中使用串行队列的 dispatch_async 与 dispatch_sync

好的,我喜欢 Grand Central Dispatch 并且在使用它之后取得了相对成功,但这是我不完全理解的东西。

假设我使用创建了自己的串行队列

之后我这样做:

第一个调度是异步的。所以,它会同时进行,对吧?如果 myQueue 是串行的,那怎么可能?串行队列如何并行执行操作,或者,如果您愿意,可以乱序执行?

谢谢

0 投票
3 回答
17306 浏览

iphone - NSURLConnection 和大中央调度

是否建议将 NSUrlConnection 包装在 gcd 样式块中并在 low_priority 队列上运行它?

我需要确保我的连接不会发生在主线程上,并且连接需要是异步的。我还需要同时发出几个请求。

如果我走 gcd 路线,我不确定 NSUrlConnectionDelegate 方法在哪个线程上被调用。

NSURLConnection 依赖于委托,所以一旦连接完成,任何处理它的包装类都需要调用它的调用者。我不确定如何处理连接工作启动/完成时调用的所有各种回调:

我应该只调用同步版本但包装在 gcd 块中吗?如果我想取消通话,请使用“dispatch_suspend”?

0 投票
2 回答
7765 浏览

objective-c - GCD 表现不佳

您可能还记得,我正在尝试使用 GCD 来加速我的一些代码,即碰撞检测和解析引擎。但是,我显然做错了,因为我的所有 GCD 代码都比我的串行代码慢得多且一致性较差(慢 1.4 倍到 10 倍之间)。请允许我举个例子:我正在以冒泡排序方式迭代一个数组,以确定该数组中对象之间所有可能的冲突:

非常简单,考虑到问题的限制,它似乎表现良好。但是,我想利用代码部分中没有修改每个对象的状态这一事实,并使用 GCD 来并行化这项工作。为此,我正在尝试这样的事情:

任何人都可以帮助我走上正确的轨道,也许可以提供一个好的 GCD 教程的链接吗?我查看了几个 GCD 教程并浏览了所有文档,但我仍然觉得我对这个主题的掌握充其量是微不足道的。谢谢!

0 投票
1 回答
507 浏览

iphone - 使用大型中央调度将数据从一个块传递到另一个块

我有一个顶级块,我想在其中创建一个变量,然后将它传递给一个子块。

我是否需要在要在顶级块中创建的数组上添加保留?这是线程安全的,因为我在一个中创建数据并将其传递给另一个?

0 投票
3 回答
3769 浏览

objective-c - Grand Central Dispatch:用于控制对数据结构的访问的队列与信号量?

我正在使用 Macruby 进行此操作,但我认为这在这里并不重要。

我有一个将其状态存储在字典数据结构中的模型。我希望并发操作偶尔更新这个数据结构。在我看来,GCD 提供了一些可能的解决方案,包括这两个:

  • 将访问数据结构的任何代码包装在发送到某个串行队列的块中
  • 使用 GCD 信号量,客户端代码在访问结构时根据需要发送等待/信号调用

当第一个解决方案中的队列被同步调用时,它看起来几乎等同于信号量解决方案。这些解决方案中的任何一个是否具有我所缺少的明显优势?我错过了更好的选择吗?

另外:用 GCD 实现读写(共享独占)锁会很简单吗?

0 投票
2 回答
3639 浏览

iphone - NSRunLoop 和 GCD 队列

我正在创建一个用于 iOS 的 c++ 库(是的,不幸的是它必须是 C++),它使用 AVCaptureSession 来捕获通过 captureOutput 回调传递的视频帧。C++ 库是我可交付的产品。我有一个可可触摸应用程序来测试/演示它。所以,它看起来像这样:

(测试应用程序)<----->(C++ 库(AVFoundation 回调))

测试应用程序具有 UI 控件并负责几乎所有图形。c++ 库通过 OpenGL 将帧渲染到 UIView。

你和我在一起吗?好的


好的,首先,用户按下一个 UIButton 来调用我的库。此调用需要 10 秒或更长时间才能完成。因此,如果我将调用直接放在按钮单击之后,UI 将被阻塞,直到库函数返回:

这不好。我尝试的下一件事是生成一个线程来调用 lib:

这不再阻塞 UI,但现在视频帧回调函数永远不会触发(AVCaptureSession 的 captureOutput)。似乎主 NSRunLoop 已被阻止。

接下来我尝试了同样的事情,但使用了 Grand Central Dispatch:

这具有相同的行为。也就是说,视频帧的回调不会触发。瘸

为什么主 NSRunLoop 在第 2 和第 3 种情况下被阻止?有没有办法将队列与之关联?

这有意义吗?