问题标签 [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.
ios - 如何避免在未结束的块上两次添加 UIView?
我在 uiimageview 中添加了一个“正在加载”视图以指示正在加载图像,然后在异步调度上我正在为图像充电并在完成后删除“正在加载”视图,问题是如果我调用两次此方法“加载”视图被添加了两次,第二个永远不会被删除。
编辑:
正在查看.h
正在查看.m
如果只调用一次,或者如果我在加载已经删除之后调用它一切正常,问题是如果我在块完成之前调用它。
谢谢大家,这是我最后的解决方案。
objective-c - dispatch_async 不像宣传的那样工作
我对 iOS 还是很陌生,但下面的代码似乎应该可以工作。我在后台有很多工作要做,所以在工作完成时应该向用户显示“忙碌指示器”。但是发生的情况是忙指示符没有出现几秒钟。它仅在大部分工作(但不是全部)完成后才会出现。
我有很多运行缓慢的日志记录(上面未显示),我可以查看输出日志(包括线程 ID)并看到覆盖已创建并且后台工作开始 - 但我的设备上没有出现覆盖几秒钟。
如何让叠加层立即出现?
ios - iOS中的调度异步不会将块发送到后台线程
代码块必须在后台线程上运行。所以App的结构是:
父类(抽象方法)
子类(抽象方法实现)
子类:方法调用被包围:
问题:它仍然在主线程上运行。如果我输入 Sleep(20),它会阻塞主 UI 20 秒。代码块是数据库插入和网络调用。
请提出可能是什么问题。
ios - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) 不加载图像
我正在尝试加载并显示图像,然后显示到 tableview 单元格,该图像是来自谷歌的链接。我试图用于dispatch_async
轻松加载,但它不会加载所有图像。
这是我的代码的一部分:
这就是我得到的:
我将我的网址存储在一个数组中,这是我的数组数组的一部分:
ios - @synchronized 和 dispatch_async
我要做的是使用该@synchronized
指令来保护单例对象不被多个线程同时访问。我还想通过在每次修改后将其写入磁盘来持久存储该单例对象,因为我尽可能努力不丢失对对象的任何更改非常重要。
现在我知道你们中的很多人可能会说不要那样做;时间太长;这不是一个好的做法,等等等等。是的,我知道这一点。这更像是一个“会发生什么?” 问题。
所以每当我去修改单例对象时,我都会将修改代码放在一个@synchronized
块中,然后将对象写入磁盘。我的一个想法是用来dispatch_async
在单独的线程上编写对象,如下所示:
所以我的理解@synchronized
是一次只有一个线程可以执行该代码块。我的理解dispatch_async
有点模糊,但是我认为这样会将block提交到dispatch queue中异步执行并立即返回。这意味着如果另一个线程在写入磁盘@synchronized
时通过我的块dataStructure
,它只会提交另一个块来运行并将新修改的写入磁盘,但是直到第一个写入磁盘后dataStructure
才会开始。dataStructure
我是否正确地考虑了这一点?也将设置原子地更改YES
或NO
或将我的调度队列的序列化确保多个线程不会同时写入该文件?
谢谢!
objective-c - dispatch_async,保持外部变量正确
我有一个像这样设置的方法:
例如,此方法可以相当快地连续调用 14 次。有 14 个不同的“identEvent”字符串。同样在调用此方法之间,类似的方法可能具有相同的代码开头,(__block NSString * identEvent) 可能会进一步混合“identEvent”字符串,这在单个线程中当然不是问题。
我的问题是,由于这个 dispatch_async 是在不同的时间和/或以后执行的,(这个方法返回很快),一个应用程序如何使用这种方法,(或一个应用程序)如何保持 identEvent 字符串是直的,所以它不会在这个使用dispatch_async 运行的不同线程中混淆identEvent 字符串?还如何确保“identEvent”不会在此过程中被释放?在执行 dispatch_async 线程之前(可能有 14 次不同的时间)?
sprite-kit - 如何让 SKPhysicJoint -addJoint 在后台线程上工作
我正在尝试在后台线程上加载和初始化我的场景,以便它在加载时不会暂停 4 秒。它工作得很好,有一个例外:我无法让 SKPhysicsJointPin -addJoint 工作 - 它每次都会崩溃,但前提是它在线程上被调用。
关节设置如下:
我正在像这样进行后台加载:
就像我说的那样,一切都很好,除了每次都会崩溃的调用,但只有在线程上时才会崩溃。
ios - 在 Objective-C 中使用大型中央调度/调度异步返回后台队列
我目前正在尝试在一段时间内在后台运行一个进程,以确保用户在我收集数据时仍然可以导航应用程序。我发现我应该为此使用 GCD。但是,我不确定如何arrayBuild
在后台队列中运行。
我如何也将它添加到后台队列?删除对 dispatch_async 的引用后,应用程序工作正常,所以我知道问题出在线程上。
ios - SAME 线程异步调用上的硬件会发生什么?
注意,相关但不相同:iPhone - Grand Central Dispatch 主线程
我在这个问题上失败了很多次,所以这里是源代码:
在主线程上
我只是好奇,当一个线程切换时,它将其寄存器存储在线程本地存储中,切换上下文,从程序计数器中的新位置运行(我假设它位于程序的副本中,它只是使用不同的堆栈和注册),然后它“返回”到主线程。
当它自己中断时,我只是想知道什么决定什么时候应该中断,以及线程本地的东西会发生什么。
我已经对此进行了一些阅读,但我仍然在思考程序不连续的事实。它们只是“当操作系统决定运行一个进程的一个块或它的块(线程)时小块做的事情。
我是自学成才的,这可能会增加我对注册/汇编知识的缺乏,这可能是任何学者的标准。
谢谢。代码应该有所帮助,这是特定于 iOS 的,但我相信答案/问题与从 main 到 main 的任何语言有关。
由于过去的每一次尝试都导致冗长的答案忽略了我问这个的原因,所以我将最后一次迭代......
这是针对同一线程的。主对主。它真的只是自行停止,将程序计数器移到别处,然后在块处结束吗?此外,这些东西通常不会在分支处改变(if/for 和块)。
将我指向正确的方向也很有效,但就像我说的那样,之前的问题被误读了。
ios - 即使我从数据源中删除了一行并重新加载了表,tableView 仍然显示两行
我有一个 NSMutableArray _conversationsArray,它基本上存储了用户在我的应用程序中进行的所有对话的 ID。基于该值,我在 tableView 中显示不同的行数。当我从数据源中删除对话并触发 tableView 的重新加载时,numberOfRowsInSection
方法触发并通过设置断点检查该数组中元素(对话)的数量:
一切似乎都很好,结果是一个很棒的对象,因为在删除之前我有两个。问题是,正如您在屏幕最左侧看到的那样,两行在 tableView 中仍然可见(即使在断点之后):/第二行应该已经消失但它没有。它确实对触摸事件没有响应,但我需要它消失。
你有没有遇到过这样的问题?任何帮助将不胜感激。
- - 更新 - -
难道它必须与线程做些什么?因为当线程发生变化时,表似乎会更新:/我可能错了,因为它很难调试