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

iphone - 将非主运行循环任务转换为 GCD

我有一个定期运行的任务,它最初设计为在一个单独的运行循环上运行,而不是使用 NSThread 和 NSTimer 的主运行循环。

调整它以利用 GCD 的最佳方法是什么?

当前代码:

detachNewThreadSelector除了替换之外我还能做些什么dispatch_async吗?

0 投票
1 回答
1140 浏览

iphone - NSURLConnection with delegate vs initWithContentsOfURL: with Grand Central Dispatch

我正在编写一个从 Internet 下载大量 JSON 数据的应用程序。我的应用需要解析这些 JSON 数据,然后将检索到的对象返回给自制委托。

现在我想知道是否可以更好地使用 NSURLConnection 或 Grand Central Dispatch 的组合dispatch_asyncinitWithContentsOfURL:使用 GCD 来防止挂起)。

使用 Grand Central Dispatch容易实现,尤其是因为我不需要委托、NSMutableData 或所有其他临时使用的变量。但是,当然,凡事有利有弊。

initWithContentsOfURLNSURLConnection与 GCD相比有哪些优势?

0 投票
2 回答
6194 浏览

iphone - 一段时间后显示 UIAlertView

我试图在一段时间后显示 UIAlertView(比如在应用程序中做某事后 5 分钟)。如果应用程序已关闭或在后台,我已经通知用户。但我想在应用程序运行时显示 UIAlertView。

我尝试如下 dispatch_async 但警报永远弹出:

另外,我读到线程在 30 到 60 分钟后死亡。我希望能够在 60 多分钟后显示警报。

0 投票
8 回答
50678 浏览

cocoa - 在 Grand Central Dispatch 中使用 dispatch_sync

谁能用非常清晰的用例解释dispatch_syncin的目的GCD是什么?我不明白我必须在哪里以及为什么要使用它。

谢谢!

0 投票
2 回答
1598 浏览

iphone - 使用 dispatch_group_async 时,块会一个接一个地被触发

数组中的 URL 一个接一个地被调用。不应该像 nsoperationqueue 那样一次性调用它吗?请在这里帮助我,谢谢

0 投票
3 回答
5285 浏览

iphone - 为方法传递块

我想将不同的块传递给一个方法。该方法随后将使用传入的块作为 dispatch_async 的参数。

我的块声明如下:

接受块的类方法实现为:

block可以将 ' ' 参数类型转换为dispatch_block_t吗?

0 投票
2 回答
2310 浏览

multithreading - CLLocation 管理器从后台线程更新

我正在使用以下命令发起本地化请求Grand Central Dispatch

它在我的 Singleton 类 LocationManager Controller 中调用一个静态方法:

在 startUpdates 方法中, 的CLLocationManager, 属性LocationManagerController被初始化并要求startUpdatingLocation.

最后,位置更新发生时的方法:

我的问题是 locationManager 只发送 3 个位置更新然后停止发送更新,即使我没有要求它停止。所以基本上,我永远不会退出 while(![locationManagerController getterDone]) 循环。

顺便说一句,在尝试使用 GCD 实现它之前,它工作正常,所以我猜这个问题与我的多线程实现有关。

任何想法 ?

编辑

我在控制台中没有收到任何错误。该程序一直在运行,但我被困在那个 while 循环中,并且在 3 个第一个位置更新后没有其他任何事情发生。

谢谢 !

0 投票
1 回答
314 浏览

cocoa - 工作表和长时间运行的任务

用户单击按钮后,我需要运行一个复杂(即长)的任务。该按钮打开一个工作表,并使用 dispatch_async 和其他 Grand Central Dispatch 东西开始长时间运行的操作。

我已经编写了代码并且工作正常,但是我需要帮助来了解我是否正确地完成了所有操作,或者我是否忽略了(由于我的无知)任何潜在的问题。

用户单击按钮并打开工作表,该块包含长任务(在此示例中,它仅运行 for(;;) 循环该块还包含在任务完成时关闭工作表的逻辑。

该面板包含一个停止按钮,允许用户在任务完成之前停止任务

0 投票
2 回答
1104 浏览

iphone - __blocks 并在 dispatch_sync 中分配对象

我想返回一个数组,其内容是在 dispatch_sync 块期间设置的。

我通常看到的代码是这样的:

如果我不是在复制一个完整的数组,而是想一个一个地添加,我可以跳过返回值上的“自动释放”吗?

dispatch_sync 块中的 [NSMutableArray 数组] 分配是否安全,以便在此方法完成堆栈后继续使用结果?

0 投票
2 回答
918 浏览

ios - NSOperationQueue 和并发操作

正如NSOperationQueueClass Reference 所说:在 iOS 中,操作队列不Grand Central Dispatch用于执行操作。它们为非并发操作创建单独的线程,并从当前线程启动并发操作。

但我发现在 iOS 4.2.1 中,队列总是为并发或非并发操作创建线程。而且我认为队列根本不关心并发或非并发,因为 isConcurrent 中的断点永远不会被打破。所以我认为参考是错误的......