grand-central-dispatch相关内容
我正在使用dispatch_sync执行一个块,并且正确执行该块。但是这个块在主线程上执行。根据Apple Doc: 串行队列(也称为专用派遣队列)在每次执行一个任务 它们被添加到队列的顺序。 当前正在执行的任务运行在由分派队列管理的不同线程(可以从任务到任务改变 )。 这意味着(或者我的理解)当前正在执行的进程将在单独的线程上运行。 下面是我使用的代码来判断发生了什么。它
..
哪些任务更适合使用 NSOperation ,而不是在为iPhone编程时使用 GCD ? 对我来说,他们似乎也做同样的事情。 解决方案 NSOperation 建立在GCD之上,所以问题更多的是你是否使用 NSOperation 或直接传递一个块到GCD。 一个 NSOperation 是笨重的,需要更多的样板代码来设置它,但它有更多的功能。您可以在代码的各个部分创建相同的
..
这是我的问题。当我的应用程序进入后台我希望它在一段时间后执行一个功能。这是我做的: - (void)applicationDidEnterBackground:(UIApplication *)application { isRunningInBackground = YES; taskIdentifier = [[UIApplication sharedApplicati
..
我使用Kiwi测试框架来测试我的应用程序中的身份验证方法。在调用dispatch_sync时,测试冻结,如下所示: dispatch_queue_t main = dispatch_get_main_queue dispatch_sync(main,^ { [[NSNotificationCenter defaultCenter] postNotificationName:kNo
..
我有一个方法接受一个块和一个完成块。第一个块应该在后台运行,而完成块应该在调用该方法的任何队列中运行。 对于后者,我总是使用 dispatch_get_current_queue(),但似乎它在iOS 6或更高版本中已被弃用。 解决方案 “在任何队列中运行调用者”的模式是有吸引力的,一个好主意。该队列可能是低优先级队列,主队列或其他具有奇怪属性的队列。 我最喜欢的方法是说“完成
..
我有一个NSNumbers数组,必须通过20个测试。如果一个测试失败,数组无效,如果所有测试通过,数组有效。我试图做的方式,只要第一个故障发生,它停止做剩余的测试。如果第三次测试发生故障,那么停止评估其他测试。 我试图将我已经是串行处理的代码转换为并行处理与大中央调度 这是我所拥有的。 测试要做。此数组用于运行测试。 每个测试在失败时返回YES,在确定时返回NO。
..
当我掌握我的技能与多线程与GCD,我遇到一些问题。假设你有以下方法: - (void)方法{ NSString * string = [NSString string]; //将被自动释放 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ { //非常非常冗长的操作..
..
我有一个方法,我添加到我创建的GCD队列(所以它是一个串行队列),然后运行它异步。从该代码块中,我调度到主队列,当分派到主队列的代码块完成时,我将一个BOOL标志设置为YES,这样我进一步在我的代码中可以检查这个条件是否是YES然后我可以继续下一个方法。下面是代码: dispatch_queue_t queue = dispatch_queue_create(“ProcessSerialQ
..
我有一些代码需要一些时间来处理,因此它适当地不应该在主队列上运行。但是我不知道如何正确地“结构化”GCD代码段。即每次应用程式启动时,我正在进行同步作业: AppDelegate.m - (void)applicationDidBecomeActive:(UIApplication *)application { AddressBookHelper * abHelper =
..
从后台运行的方法调用 performSelectorInBackground:... 的真正效果是什么?我想让它异步运行 例如: - void)_imageBufferWasUpdated { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //在这里做一些事情 if(shouldContin
..
我有一个基于视图的 NSTableView ,我支持一个`NSMutableArray。 当我这样做而没有指定动画时, insertRowsAtIndexes:withAnimation:它似乎工作正常小时结束。但是,如果我指定动画,在大约7或8个插入后,表视图开始显示发生插入的空白行。 调用 insertRowsAtIndexes:withAnimation 的代码是在一个块中,而不
..
对于学习(不是实际的)目的,我想使用下面的方法NSDictionary给我回来一组键使用我已经定义的测试值。不幸的是不知道如何指定谓词。 NSDictionary keysOfEntriesPassingTest: - (NSSet *)keysOfEntriesPassingTest: (^)(id key,id obj,BOOL * stop))谓词 我的值是NSU
..
无论何时,我注意到我使用一个块来迭代集合,而不写入任何共享数据或导致任何副作用。我考虑添加一个NSEnumerationConcurrent选项,然后决定它,因为我不真正明白什么时候值得使用。 所以我有一个具体的问题,更常见的一个。 第一个问题:这里有一个使用块做并行处理的例子: CGFloat GetAverageHeight(NSArray * people) { NS
..
如果我通过GCD访问一个 NSMutableArray 有两个不同的线程,一个是基于可变数组创建一个新的数组,而另一个线程从数组中删除记录,我应该期望这是一个问题吗?也就是说,不应该复制,我认为只是“读取”数组,只是得到什么发生在数组中的那一刻?我不是枚举在任何一个线程中的数组,但它仍然崩溃。 这里是“读取”: dispatch_async(saveQueue,^ { NSDi
..
我目前正在使用具有GCD队列的同步ASIHTTPRequest从Internet下载数据,然后使用JSONKit解析响应数据。你对这种模式有什么看法。提前感谢。 这是我的代码: dispatch_async (队列,^(void){ //请求是ASIHTTPRequest。 [request startSynchronous]; //解析JSON NSArray
..
我正在阅读 我看到很多代码调用以下任何后台任务: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); 现在我所说的'background'意思是流行的意思: 在主(UI)线程以外的任何地方执行的任何东西 返回具有不同优先级的任何非主线程队列。 我的问题是,为什么
..
你可能还记得,我试图使用GCD来加速我的一些代码,即碰撞检测和解析引擎。但是,我明显做错了,因为我的所有GCD代码是显着更慢,不如我的序列代码(在1.4倍和10倍慢)之间的一致性。让我给你一个例子:我以一个冒泡排序方式迭代数组,以确定数组中对象之间的所有可能的碰撞: - (double)detectCollisionsInArray:(NSArray *)objects { int
..
与我一起,这将要采取一些解释。我有一个类似下面的函数。 上下文:“aProject”是一个名为LPProject的核心数据实体,名为“memberFiles”,包含另一个核心数据实体称为LPFile。每个LPFile表示磁盘上的文件,我们要做的是打开每个文件并解析其文本,查找指向OTHER文件的@import语句。如果我们找到@import语句,我们要定位它们指向的文件,然后通过向表示第一个
..
我读了关于SO的评论,分派队列到主线程和在主线程执行代码不一样。如果我正确理解用户说这个 dispatch_async(dispatch_get_main_queue(), ^ { // some code }); 与此不同 [self performSelectorOnMainThread:@selector(doStuff) withObject:n
..
我想写一些线程安全的方法,所以我使用: ... dispatch_queue_t main = dispatch_get_main_queue(); dispatch_sync(main,^ { [self doSomethingInTheForeground]; }); ... 但是如果我在主线程没有必要,我可以跳过所有这些调度调用,所以我想知道我目前的
..