问题标签 [dispatch-async]

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 回答
673 浏览

iphone - dispatch_async 块没有被调用

MySynchManager类有一个共享实例。

类中的功能之一MySynchManager

uploadSession:@"session"正在从视图控制器调用。

我面临的问题是有时会dispatchSession调用存在的代码,但有时不会调用块。我只在打印块后观察日志打印语句。

你们中的任何人都可以解释这背后的原因吗?

0 投票
0 回答
236 浏览

iphone - 使用构建框架中的 dispatch_async

我面临着一个奇怪的问题dispatch_async

我有两个独立的项目:一个用于构建框架,另一个用于将框架用于某些目的。

我正在尝试执行非常简单的代码(甚至没有任何额外的代码):

所以如果我把它dispatch_async放到我的项目中,它就完美了,
但是如果把它放到我的框架项目的某个方法中并构建它
,然后从使用该框架的项目中调用该方法,那么我在堆栈的第一行
收到EXC_BAD_ACCESS错误dispatch_asyncobjc_retainAutoreleasedReturnValue

虽然这dispatch_async仅适用于dispatch_get_main_queue()队列

我尝试创建具有不同优先级的不同队列,我尝试了静态队列,
它们实际上是创建的,但dispatch_async每次都崩溃

我相信这是与我的框架项目中构建设置中的一些标志相关的问题,
但不幸的是我找不到任何可以帮助的东西

更新:
我忘了说,这完全适用于模拟器,但不适用于设备

这是我的代码示例:

SingleTonOfFramework - 是我框架中的一个类,
它的作用是:

0 投票
2 回答
1221 浏览

ios - 无法关闭 UIAlertView,按钮不可点击

我有以下代码,我在其中显示 MBProgress 视图,然后在单独的线程中运行代码。然后我得到一个主线程的句柄并关闭工作的微调器,然后我显示一个 UIAlertView。UIAlertView 加载正常,但是我无法单击任何按钮。如果警报视图在调度块之外,它可以正常工作。有任何想法吗?

0 投票
1 回答
2454 浏览

ios - gcd/dispatch_async 和 CoreData 冻结应用程序

出于某种原因,同时使用 dispatch_async 和 Core Data 会导致我的应用程序完全冻结,但没有崩溃。

症状

用户界面没有响应。该应用程序不会崩溃。

该应用程序用于[[UIAccelermeter sharedAccelerometer] setDelegate: self]连续获取加速度计值。" accelerometer:didAccelerate:" 回调在主线程上运行。发生此问题时,回调不再执行。

因此主线程似乎被“冻结”了。

语境

NSURLConnection在我的应用程序中使用将 HTTP 请求发送到我的服务器。在处理响应数据的 connectionDidFinishLoading 中,执行大约需要 2 秒,并且在这 2 秒内用户界面将无响应,因为它在主线程中运行。

经过一番研究,在这种情况下执行数据处理似乎gcd/dispatch_async是最好的解决方案。因此,在 中connectionDidFinishLoading,我添加了以下 gcd 调用:

这有时可以正常工作,但它会导致应用程序随机冻结 - 即使使用相同的代码,在 Core Data 存储中使用相同的数据,重复测试表明可以在 X% 的时间内观察到症状。发生问题的可能性受几个因素的影响,下文将进一步解释。

handleTheData() 有什么作用?

它检查来自 的响应数据NSURLConnection,这是 JSON 格式的字符串。该字符串是 3 个实体列表,每个实体是一个数字数组的数组。因此有代码可以将 JSON 格式的字符串转换为 3 个自定义对象的 NSMutableArray,其中每个对象都是一个子类 NSManagedObject。

在转换过程中,由于这些对象是“临时的”,它们可能会或可能不会永久存储,因此它们是在“nil”NSManagedObjectContext 中创建的,如下所示:

这样,它们就不会与主要上下文混合。

然后将这些新对象与数据存储中的现有实体进行比较。因此,需要从数据存储中重复获取一些代码以查看特定的新实体是否已经存在,并且根据新实体的数据,新实体可能会保存到数据存储中,或者可能会更新现有实体。

经常调用 [managedObjectContext save: &error] 以确保永久保存更改。

还有什么在后台运行吗?

如症状部分所述,Accelerometer 使用 [[UIAccelermeter sharedAccelerometer] setDelegate: self] 在主线程的后台运行

AudioUnits 也被设置为在后台运行(根据 Apple 文档,在单独的“优先级”线程上)以产生声音。

问题原因的调查结果

发现问题发生的几率受以下因素影响:

  • 如果某些调试代码被注释掉,例如 NSLog(@"fetchedResult: %@", fetchedResult),问题发生的机会就会降低(但仍然会发生)。
  • 如果不使用加速度计,这个问题几乎不会发生(但不是 100% 肯定,因为我做了有限数量的测试)。
  • 如果使用加速度计,问题发生的可能性约为 50/50。
  • 如果某些核心数据代码(例如 [sampleEntity setXYZ..])被注释掉,即使使用了加速度计,该问题也几乎不会发生。

第二期

此外,即使主线程没有被冻结,也会发生另一个问题。数据处理代码将在中途结束而不会引发错误。

  • 这意味着,数据处理只会部分完成,不会抛出错误,主线程继续正常运行。
  • 只要主要问题没有发生,第二个问题就会经常(但并非总是)发生。

有趣的问题不是吗?:)

编辑

  • 2013 年 3 月 1 日 - 我之前认为问题的原因是 iOS 6。抱歉,这是完全错误的。修改描述以反映新发现。
0 投票
1 回答
1175 浏览

iphone - bool _WebTryThreadLock(bool), 0xae8d250 错误

bool _WebTryThreadLock(bool), 0xae8d250: 试图从主线程或web线程以外的线程获取web lock。这可能是从辅助线程调用 UIKit 的结果。现在崩溃...

我的代码

0 投票
2 回答
7143 浏览

objective-c - dispatch_async vs dispatch_sync 执行顺序

我创建了一个串行调度队列:

我想使用这个串行队列来确保类访问的线程安全,同时自动异步执行不需要返回调用线程的工作。

如果我调用 addObjectToQueue: 方法,然后立即调用 isObjectInQueue: 方法,它们是否保证以相同的顺序执行,或者 isObjectInQueue 会/可以先执行吗?

换句话说,除了不阻塞调用线程之外,dispatch_async 的执行是否与 dispatch_sync 完全相同(立即调度块)?

我见过类似的问题,答案是双向的,所以我正在寻找一个明确的答案,最好有 Apple 文档支持。

0 投票
1 回答
279 浏览

ios - 如何将操作从主队列转移到后台释放主队列

这就是我正在做的事情。

我的问题是在主队列中进行可达性测试,这通常会冻结 UI。我想在后台模式下运行。

我想在后台模式或低优先级模式下处理 ReachabilityTest。但同样,我的可达性控制器确实通知用户当前的网络可用性,所以在某些时候我将不得不再次使用主队列。

我坚信一定有更好的方法。

0 投票
2 回答
113 浏览

iphone - 如何在线程中执行 GUI 操作 - IOS

我有一个线程会调用我的许多接口函数。当它调用时我需要做一些 GUI 操作,因为我知道 GUI 需要在主线程中完成,现在我还在使用

在大多数情况下它都可以正常工作,但我在这里仍然面临问题..例如..我的界面功能如下...

现在名称指针大部分时间我在调度调用中得到 nil (我想我在这里丢失数据),我尝试使用 performselectoronMainthread 方法..但我不知道如何将它与多个参数一起使用..

任何想法谢谢..

0 投票
1 回答
405 浏览

objective-c - 异步获取图像并设置 setNeedsDisplay

此代码位于设置自定义单元格元素的单元格初始化例程中。它从网络异步获取图像。但是一旦完成,我需要它重新绘制。

这是我的代码片段:

但它不会重绘 UIImageView。我也尝试重新绘制整个单元格,但这也不起作用。非常感谢您的帮助。我一直在努力解决这个问题一段时间!

0 投票
2 回答
1000 浏览

iphone - for 语句中的 dispatch_async 有什么区别

我想知道dispatch_async在以下表示为“A”和“B”的方法中使用之间有什么区别。

A

B