grand-central-dispatch相关内容

dispatch_sync总是在主线程上调度一个块

我正在使用dispatch_sync执行一个块,并且正确执行该块。但是这个块在主线程上执行。根据Apple Doc: 串行队列(也称为专用派遣队列)在每次执行一个任务 它们被添加到队列的顺序。 当前正在执行的任务运行在由分派队列管理的不同线程(可以从任务到任务改变 )。 这意味着(或者我的理解)当前正在执行的进程将在单独的线程上运行。 下面是我使用的代码来判断发生了什么。它 ..

哪些任务比GCD更适合NSOperation?

哪些任务更适合使用 NSOperation ,而不是在为iPhone编程时使用 GCD ? 对我来说,他们似乎也做同样的事情。 解决方案 NSOperation 建立在GCD之上,所以问题更多的是你是否使用 NSOperation 或直接传递一个块到GCD。 一个 NSOperation 是笨重的,需要更多的样板代码来设置它,但它有更多的功能。您可以在代码的各个部分创建相同的 ..
发布时间:2016-12-08 16:52:55 移动开发

iOS 6中完成块的dispatch_get_current_queue()的替代方法?

我有一个方法接受一个块和一个完成块。第一个块应该在后台运行,而完成块应该在调用该方法的任何队列中运行。 对于后者,我总是使用 dispatch_get_current_queue(),但似乎它在iOS 6或更高版本中已被弃用。 解决方案 “在任何队列中运行调用者”的模式是有吸引力的,一个好主意。该队列可能是低优先级队列,主队列或其他具有奇怪属性的队列。 我最喜欢的方法是说“完成 ..

将代码转换为Grand Central Dispatch

我有一个NSNumbers数组,必须通过20个测试。如果一个测试失败,数组无效,如果所有测试通过,数组有效。我试图做的方式,只要第一个故障发生,它停止做剩余的测试。如果第三次测试发生故障,那么停止评估其他测试。 我试图将我已经是串行处理的代码转换为并行处理与大中央调度 这是我所拥有的。 测试要做。此数组用于运行测试。 每个测试在失败时返回YES,在确定时返回NO。 ..
发布时间:2016-12-08 02:31:45 其它移动开发

等待条件继续

我有一个方法,我添加到我创建的GCD队列(所以它是一个串行队列),然后运行它异步。从该代码块中,我调度到主队列,当分派到主队列的代码块完成时,我将一个BOOL标志设置为YES,这样我进一步在我的代码中可以检查这个条件是否是YES然后我可以继续下一个方法。下面是代码: dispatch_queue_t queue = dispatch_queue_create(“ProcessSerialQ ..
发布时间:2016-12-07 22:50:22 移动开发

基于视图的NSTableView在插入带有动画的新行后呈现空白行

我有一个基于视图的 NSTableView ,我支持一个`NSMutableArray。 当我这样做而没有指定动画时, insertRowsAtIndexes:withAnimation:它似乎工作正常小时结束。但是,如果我指定动画,在大约7或8个插入后,表视图开始显示发生插入的空白行。 调用 insertRowsAtIndexes:withAnimation 的代码是在一个块中,而不 ..

如何指定NSDictionary的keysOfEntriesPassingTest所需的块对象/谓词?

对于学习(不是实际的)目的,我想使用下面的方法NSDictionary给我回来一组键使用我已经定义的测试值。不幸的是不知道如何指定谓词。 NSDictionary keysOfEntriesPassingTest: - (NSSet *)keysOfEntriesPassingTest: (^)(id key,id obj,BOOL * stop))谓词 我的值是NSU ..
发布时间:2016-12-07 04:20:15 其它移动开发

何时使用NSEnumerationConcurrent

无论何时,我注意到我使用一个块来迭代集合,而不写入任何共享数据或导致任何副作用。我考虑添加一个NSEnumerationConcurrent选项,然后决定它,因为我不真正明白什么时候值得使用。 所以我有一个具体的问题,更常见的一个。 第一个问题:这里有一个使用块做并行处理的例子: CGFloat GetAverageHeight(NSArray * people) { NS ..
发布时间:2016-12-07 03:48:23 移动开发

在读取时改变数组,而不是枚举

如果我通过GCD访问一个 NSMutableArray 有两个不同的线程,一个是基于可变数组创建一个新的数组,而另一个线程从数组中删除记录,我应该期望这是一个问题吗?也就是说,不应该复制,我认为只是“读取”数组,只是得到什么发生在数组中的那一刻?我不是枚举在任何一个线程中的数组,但它仍然崩溃。 这里是“读取”: dispatch_async(saveQueue,^ { NSDi ..
发布时间:2016-12-07 03:43:37 其它移动开发

iOS GCD:任何全局队列与具有后台优先级的队列之间的差异(DISPATCH_QUEUE_PRIORITY_BACKGROUND)?

我正在阅读 我看到很多代码调用以下任何后台任务: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); 现在我所说的'background'意思是流行的意思: 在主(UI)线程以外的任何地方执行的任何东西 返回具有不同优先级的任何非主线程队列。 我的问题是,为什么 ..

GCD性能差

你可能还记得,我试图使用GCD来加速我的一些代码,即碰撞检测和解析引擎。但是,我明显做错了,因为我的所有GCD代码是显着更慢,不如我的序列代码(在1.4倍和10倍慢)之间的一致性。让我给你一个例子:我以一个冒泡排序方式迭代数组,以确定数组中对象之间的所有可能的碰撞: - (double)detectCollisionsInArray:(NSArray *)objects { int ..
发布时间:2016-12-07 01:52:26 移动开发

dispatch_sync对主队列上的dispatch_async

与我一起,这将要采取一些解释。我有一个类似下面的函数。 上下文:“aProject”是一个名为LPProject的核心数据实体,名为“memberFiles”,包含另一个核心数据实体称为LPFile。每个LPFile表示磁盘上的文件,我们要做的是打开每个文件并解析其文本,查找指向OTHER文件的@import语句。如果我们找到@import语句,我们要定位它们指向的文件,然后通过向表示第一个 ..