问题标签 [ios-multithreading]

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

grand-central-dispatch - 应用程序启动时偶尔崩溃

我在应用程序启动时遇到了非常奇怪的崩溃。我的应用程序产生了很多线程(超过 500 个,其中大多数与 PLPreheatItem 相关,我无法在此处粘贴完整的崩溃日志,因为 stackoverflow 限制为 30K 个符号)。

问题是我无法在我的设备上重现它。此外,几乎每次运行都会为我的客户进行全新安装。

我正在使用带有后台会话的 NSURLSession 和带有 4 个并发操作的 NSOperationQueue。这些是我认为最薄弱的部分。

有人可以建议我需要在哪里挖掘。因为我真的不知道该怎么办。

谢谢你。

0 投票
1 回答
114 浏览

ios - 迅速,在同一个任务的线程中再次调用网络

对不起初学者的问题。我有一个动作取决于从网络返回的数据的结果,并且该动作可能需要另一个网络请求。由于已经在 datatask 中调用了第一个网络请求,我想为第二个网络请求使用同一个线程,但不知道该怎么做。任何提示?tks

0 投票
2 回答
317 浏览

ios - 了解 dispatch_queues 和同步/异步调度

我是一名 Android 工程师,试图移植一些使用 5 个串行调度队列的 iOS 代码。我想确保我以正确的方式思考事情。

  • dispatch_sync 到 SERIAL 队列基本上是将队列用作同步队列 - 只有一个线程可以访问它,并且可以将执行的块视为关键区域。它立即发生在当前线程上——相当于

    /li>
  • dispatch_async 到串行队列 - 在另一个线程上执行块并让当前线程立即返回。然而,由于它是一个串行队列,它保证一次只会执行其中一个异步线程(对 dispatch_async 的下一次调用将等到所有其他线程完成)。该块也可以被认为是一个关键区域,但它会发生在另一个线程上。所以与上面相同的代码,但它首先传递给一个工作线程。

我是不是在其中任何一个,或者我是否正确地弄清楚了?

0 投票
1 回答
128 浏览

ios - 如何确保使用 GCD 在 swift3 应用程序中连续完成调用

我需要这个代码块按顺序运行:

它正在内部运行DispatchQueue.main.async()(每个网络调用都是我试图暂时阻止用户输入的原因)。我仍在学习 swift 并且在 GCD 概念上有些挣扎。任何建议将不胜感激。

0 投票
1 回答
605 浏览

ios - Realm - 在后台线程上批量更新 RLMResults

我有需要迭代的 RLMResults,执行一个可能“长时间运行”的下载任务(足够长,它不应该在主线程上),并使用此下载的结果更新每个对象。我尝试过的最新迭代(在搜索文档以获得答案之后)是这样的,虽然这显然不能按预期工作,但它是演示目的的起点:

我已经尝试了十多次迭代,但无法找出规范的 Realm 方法来做我想做的事情,即下载大量图像(数千张)并更新我的每一个具有后台线程下载结果的领域对象。

0 投票
1 回答
56 浏览

ios - 正确的线程处理

我遇到了一个需要正确线程的问题,但我似乎无法正确优化它。

这是我的方法:

在 [self refreshTableSessionList:xx] 里面,有一个

从服务器数据库中获取数据,然后

填充和重新加载 tableViewCell。

但是当我放一个

before[alloc database etc stuffs and retrieving of data here] 和 putdispatch_async(dispatch_get_main_queue(), 当按钮变灰时,但那是在一个循环内,我认为这不是正确的方法。

克服这个问题的解决方案是什么?

0 投票
1 回答
617 浏览

ios - UICollectionView reloadData 从不通过数据源

我试图在 UICollectionView 中显示数据,它的工作方式与我在整个应用程序中所做的完全一样,但由于某种原因,它在这种情况下不起作用:

这是理解问题所需的代码:

一些控制器:

控制器初始化包含 UICollectionView 的视图。这部分由自动布局和约束处理,我没有问题。它还继承自 UIColleCtionViewDelegate 和 UICollectionViewDataSource。:

视图初始化 collectionView 并由 SegmentedControl 显示,它完美地工作:

并且分段控件显示的值发生了变化:

如您所见,我正在设置从控制器到视图的回调,以便对我的网络执行操作并获取要在 collectionView 上显示的数据。以下是控制器中的方法:

reloadData 不起作用。在解释哪些部分有效,哪些无效之前,这里是代表和数据源的方法:

我有一个自定义集合视图单元格,它正在处理其他集合视图,所以没问题。当我进行注册时,我还负责区分所有不同 CollectionViews 的标识符。在这种情况下,当我使用断点时,部分中的项目数> 0,但是当我在网络设置 contactsSearchResult 后在主线程中执行 reloadData 时,它永远不会通过 collectionView cellForItemAt。

任何的想法?

0 投票
1 回答
5894 浏览

ios - 如何在 Swift 中将任务发送到后台队列?

我有一个在用户点击按钮时设置的本地通知。我想将此发送到后台线程,然后更新 UI。这是一种安全的方法吗?

0 投票
1 回答
72 浏览

ios - 为什么我添加了几个对象后,我的数组大小总是为零?

我制作了两个函数,它们通过 HTTP GET 请求调用两个不同的 rest API。我创建了一个名为“ExchangeObject”的类,它将从 API 检索到的数据封装到一个对象中。在每次调用中,我将一个 ExchangeObject 类的对象附加到一个名为 exchangeArray 的数组中。

ExchangeObject 类的一个属性称为“价格”,它是一个 int 值。在 viewDidLoad 中,我调用另一个函数来计算数组中两个对象的平均价格。但是,数组总是空的!我不知道为什么。我认为这是因为我正在进行异步调用,但我不知道如何修复它。但是,我的 tableview 不是空的。它显示数组中对象的两个价格。

0 投票
1 回答
1041 浏览

ios - 如何在 @synchronized 块内等待完成处理程序?

我想在关键部分内同步调用完成处理程序(使用 @synchronized 块)。我正在尝试使用信号量等待完成处理程序,但从未调用信号量信号。

这是我正在做的事情:

我相信,由于 @synchronized 块,完成处理程序在与调用者相同的线程上被调用,这会导致死锁。那正确吗?如果是,还有什么方法可以实现?

谢谢!