-
443 votesanswersviews
NSOperation vs Grand Central Dispatch
我'm learning about concurrent programming for iOS. So far I'已经阅读了NSOperation/NSOperationQueue和GCD . What are the reasons for using NSOperationQueue over GCD and vice versa? 听起来像 GCD 和 NSOperationQue... -
0 votesanswersviews
核心数据:执行获取后插入新行
我在弄清楚这个GCD问题时遇到了麻烦 . 让's say there'在表视图中显示一个UITableViewCell . 此单元格包含用户正在编辑的一些文本字段 . 用户完成编辑后,单元格将根据用户输入的内容在Core Data中创建一个新对象 . 此对象随 insertNewObjectForEntityForName 一起插入 . 在此之后,我需要在NSFetchedResultsContr... -
4 votesanswersviews
如何为嵌套的UIView animateWithDuration调用组调用单个完成块?
我有一批动画调用,通过遍历数组调用 . 所有这些调用都嵌套在封装动画块中,以便它们并行有效地执行 . 我也有一个完成块,我只想在所有嵌套动画完成后触发 .问题是嵌套动画的持续时间是未知的,所以我不能简单地计算出最后一个完成的调用,并在此调用中设置完成块 . 类似地,我无法计算持续时间并在完成块上使用延迟调用 .希望一个例子可以使这更清楚 . 这是我正在尝试做的(非常简化)版本: -(void) a... -
2 votesanswersviews
DispatchQueue的Swift 3.0未解析标识符
我一直试图找到这个问题几个小时的答案,但仍无济于事 . 我想使用以下代码: func fetchPosts() { ref.child("Amore").child("Posts").observeSingleEventOfType(.Value, withBlock: { (snapshot) in if let dictionar... -
10 votesanswersviews
dispatch_sync始终在主线程上调度块
我正在使用dispatch_sync执行一个块,并且块正确执行 . 但是这个块在主线程上执行 . 根据Apple Doc: 串行队列(也称为专用调度队列)按照将它们添加到队列的顺序一次执行一个任务 . 当前正在执行的任务在由调度队列管理的不同线程(可能因任务而异)上运行 . 这意味着(或我所理解的)当前正在执行的进程将在一个单独的线程上运行 . 下面是我用来判断's going on. It ... -
6 votesanswersviews
在GCD中,串行队列中的所有任务都保证在同一个线程中运行吗?
在GCD中,串行队列(例如主队列)中的所有任务是否都保证在同一个线程中运行? -
1 votesanswersviews
派遣到并发队列导致在主线程上执行?
Apple的GCD文档声明如下: GCD提供并管理应用程序可以以块对象的形式提交任务的FIFO队列 . 提交到调度队列的块在完全由系统管理的线程池上执行 . 不保证任务执行的线程 . GCD提供三种队列: 这是否意味着即使我发出了诸如此类的请求 dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ... -
1 votesanswersviews
为什么异步阻止执行阻塞主线程?
我有一个使用 AFNetworking 发送请求的应用程序,在完成下载后,它调用块我从JSON创建数据模型 . 在模型初始化期间,使用以下代码加载异步图像 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData *urlData = [NSData dataWithCont... -
0 votesanswersviews
需要有关使用GCD将块添加到队列(objective-c)的建议
我有一个使用GCD的多线程功能的iPad应用程序 . 当我需要进行某种类型的后台处理时,我使用以下代码: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ -backgroundProcessing- }** 所以我的两个问题是: 1)由于我已将后台处理的 ALL 添加到同一队列,并且... -
1 votesanswersviews
如何申报Grand Central Dispatch
我正在使用我为GCD找到的相当不错的tutotial,它向您展示了如何声明一个新的调度队列 . Grand Central Dispatch使用队列进行操作 . 队列是C typedef:dispatch_queue_t . 为了获得一个新的全局队列,我们调用dispatch_get_global_queue(),它接受两个参数:一个long用于优先级,一个unsigned long用于选项,这... -
90 votesanswersviews
GCD中的并发vs串行队列
我正在努力完全理解GCD中的并发和串行队列 . 我有一些问题,希望有人能够清楚地回答我 . 我正在读取串行队列的创建和使用,以便一个接一个地执行任务 . 但是,如果出现以下情况: 我创建了一个串行队列 我使用 dispatch_async (在我刚刚创建的串行队列上)三次调度三个块A,B,C 这三个块会被执行: 按顺序A,B,C,因为队列是串行的 要么 同时(在parral... -
1 votesanswersviews
何时使用GCD队列,何时知道你需要它们?迅速
在阅读了Concurrent和Serial队列,同步和异步之后,我想我对如何创建队列及其执行顺序有所了解 . 我的问题是,在我看过的任何教程中,没有一个实际告诉你许多用例 . 例如: 我有一个网络管理器使用URLSessions并序列化json向我的api发送请求 . 将它包装在 .utility Queue或_2618027中是否有意义,或者我只是不将它包装在队列中 . let task = ... -
39 votesanswersviews
主队列上的dispatch_sync在单元测试中挂起
我在使用内置的Xcode单元测试框架SenTestingKit测试一些宏的中央调度代码时遇到了一些麻烦 . 我成功地解决了我的问题 . 我有一个单元测试,它构建一个块并尝试在主线程上执行它 . 但是,该块永远不会被实际执行,因此测试会挂起,因为它是同步调度 . - (void)testSample { dispatch_sync(dispatch_get_main_queue(), ^(... -
116 votesanswersviews
串行队列上dispatch_async和dispatch_sync之间的区别?
我已经创建了一个这样的串行队列: dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL); dispatch_async 之间的区别是什么? dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); ... -
370 votesanswersviews
如何在Swift 3中创建调度队列
在Swift 2中,我能够使用以下代码创建队列: let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT) 但这不能在Swift 3中编译 . 在Swift 3中写这个的首选方法是什么? -
2 votesanswersviews
Swift - dispatch_after的替代品
Swift / SO新手在这里 - 将尽力清楚! 我有 @IBAction 来自 wkinterfacepicker . 这会调用一个可能再次更改选择器的函数 - 这会导致再次触发 @IBAction ,从而导致不必要的循环类型行为 . 我想要做的是让控制传递给第二个函数,而不是从/返回到 @IBAction 函数 . 我有一个使用 dispatch_after 的工作解决方案,实现任意延迟,以... -
7 votesanswersviews
在CTCallCenter callEventHandler中取消隐藏视图非常慢
在原始问题没有回答之后重新发布更简洁和专注的问题 . 在另一天的研究之后,还要对问题进行更深入的了解: 在我的app delegate( didFinishLaunching )中,我在 CTCallCenter 上设置了 callEventHandler . 我的想法是,当callState更改时,我发布一个包含 call.callState 的userInfo dict的通知 . 在我看来,... -
2 votesanswersviews
Linux中的异步Swift处理无法正常工作
我试图了解Swift 4.0异步处理在Linux中是如何工作的 . 在看了documentation和一些answers之后我想出了这个简单的例子: import Dispatch import Glibc DispatchQueue.main.asyncAfter(deadline: .now()) { print("Done!") } print("S... -
174 votesanswersviews
在启动另一个块之前等待直到执行两个异步块
使用GCD时,我们希望等到两个异步块执行完成后再继续执行下一步 . 最好的方法是什么? 我们尝试了以下方法,但它似乎不起作用: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); dispatch_async(dispatch_get_global_qu... -
0 votesanswersviews
Dispatch_once单例错误目标c
我对GCD比较陌生,我目前正在使用它在我的应用程序中创建一个单例对象 . 经过一些研究后我发现使用GCD的dispatch_once()方法是实现单例设计模式的最佳方法 . 出于某种原因,我的代码是破碎的,我无法弄清楚我的生活 . 下面,我已经粘贴了我的单例创建/初始化代码和响应错误 . +(id)sharedErrorMapper { static dispatch_once_t onceTo... -
9 votesanswersviews
Dispatch once(dispatch_once)singleton冻结/锁定目标c
这行代码是在我的 awakeFromFetch 方法中调用的,该方法位于实现 NSManagedObject 的自定义托管对象中 . 这一行特别是调用我的名为 sharedManager 的单例网络管理器类 . [self setSync:(![[WKNetworkManager sharedManager] objectHasPendingRequests:self.objectID]) ]; ... -
73 votesanswersviews
您是否需要在GCD的块内创建NSAutoreleasePool?
通常,如果您在NSOperationQueue上生成后台线程或运行NSOperation,则需要为该线程或操作创建NSAutoreleasePool,因为默认情况下不存在 . 相同的规则是否适用于放置在Grand Central Dispatch队列中并将在非主线程上运行的块?也就是说,您是否需要在每个块中创建一个NSAutoreleasePool,并将其分派给主队列以外的任何其他块? 在我的有限... -
3 votesanswersviews
Grand Central Dispatch:我如何等待块的队列完成?
在iOS中我有一个应用程序,我需要等待GCD队列中当前运行的块完成 . 我的印象是这行代码会做到这一点: dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{}); 我从这里得到了这个提示: http://www.fieryrobot.com/blog/2010/06/27/a-simple-job... -
61 votesanswersviews
如何在没有死锁的情况下同步调度主队列?
我需要同步在主队列上调度一个块 . 我不知道我目前是在主线程上运行还是不运行 . 天真的解决方案看起来像这样: dispatch_sync(dispatch_get_main_queue(), block); 但是如果我当前在主队列上运行的块中,则此调用会产生死锁 . (同步调度等待块完成,但块甚至没有开始运行,因为我们正在等待当前块完成 . ) 显而易见的下一步是检查当前队列: if (di... -
32 votesanswersviews
Grand Central Dispatch中线程限制的解决方法?
使用Grand Central Dispatch,可以轻松地在非主线程上执行耗时的任务,避免阻塞主要主题并保持UI响应 . 只需使用 dispatch_async 并在全局并发队列上执行任务即可 . dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // code }); 然而... -
1 votesanswersviews
GCD - 阻塞队列上的dispatch_async
如果 dispatch_async 在's currently blocked by it'拥有 dispatch_sync 操作的队列上的代码块会发生什么?在 dispatch_sync 操作返回后,它们是否锁定或阻塞的队列是否会继续? 我有一个我创建的对象来管理对后备存储的访问(在本例中为SQLite) . 它使用一个 concurrent GCD队列,并且想要从存储中访问信息的任何其他对象... -
3 votesanswersviews
如果我在dispatch_async块中有dispatch_sync调用后跟第二个调度调用,那么第二个调用是同步还是异步是否重要?
这段代码是针对一个非常标准的情况,我让我的数据模型执行一些可能很慢的数据检索,并且我想在数据检索完成后用数据更新我的视图 . dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ dispatch_sync(queue... -
1 votesanswersviews
并发调度队列未被阻止
我正在阅读一本iOS书,上面写着“dispatch_sync函数阻塞了块提交的并发队列,即它使队列等待” . 基于这个概念,我创建了自己的示例,如下所示 . 以下片段写在“viewDidLoad”方法中 dispatch_queue_t concQueue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); void (... -
1 votesanswersviews
等待具有异步操作的功能完成[关闭]
如何等待自身具有异步操作的函数完成? 让我给你举个例子: Function_A 从图库中提取照片 . 使用提取闭包异步执行提取操作 . 我在 Function_B 中调用 Function_A 并且我想等待照片获取操作完成,然后继续我的代码 . 我尝试过的: 我've used dispatch group but it has not worked. I'也试图在同步块中调用 Function_... -
0 votesanswersviews
重新加载数据时TableView闪烁
我正在iOS应用程序中实现无限滚动(当用户滚动到底部时 - 新的API调用用于获取更多值并将其显示为tableview单元格) . 当用户接近最后显示的单元格时,我运行此功能 func loadItems() { isFetchingMore = true //reloading section 1 with loading indicator tableView.re...