草庐IT

grand-central-dispatch

全部标签

ios - 如何获取多个 DispatchWorkItems 的取消状态

背景我正在实现搜索。每个搜索查询都会产生一个DispatchWorkItem,然后排队等待执行。由于用户触发新搜索的速度比完成前一个搜索的速度快,因此我想在收到新搜索后立即取消前一个搜索。这是我当前的设置:varcurrentSearchJob:DispatchWorkItem?letsearchJobQueue=DispatchQueue(label:QUEUE_KEY)funcupdateSearchResults(forsearchController:UISearchController){letqueryString=searchController.searchBar.te

ios - 使用 GCD 并回调主线程时如何设置正确的对象拆卸?

考虑这个设置:对象A创建对象B做一些工作,并将自己设置为B的委托(delegate),以通知工作进度。B使用GCDblock做一些工作,并用有关工作完成的委托(delegate)方法向A发回信号。A想在工作完成后拆除(发布)B。在代码方面:对象A:B*b=[[Balloc]init];b.delegate=self;[bdoSomeWork];-(void)didSomeWorkFromB:(B*)b{[brelease];b=nil;}对象B:-(void)doSomeWork{dispatch_async(dispatch_get_global_queue(DISPATCH_QUE

ios - 如何使用 GCD 对异步后台任务进行排序?

我在iOS上使用GCD在后台线程上执行一项耗时的任务。API有一个start方法,它接受两个block作为参数,这两个block都在主队列上调用。第一个在任务开始时调用,第二个在任务完成时调用。这一切都有效。我实际上需要完成其中几项耗时的任务。API让我可以同时启动它们,然后等待每个完成并通过block更新UI。它们同时运行。但是我实际上想做的是对耗时的任务进行排序(仍然使用描述的API启动每个任务)以便我可以同时启动它们,让第一个运行并给我它的调用-backs,然后让第二个运行并给我它的回调等,直到所有完成。使用GCD和block实现此目的的最佳方法是什么?如果任务是同步的,我只需要

objective-c - objective c singleton dispatch_once 实现更好?

看到很多人建议用dispatch_once来做单例:+(MyClass*)singleton{staticdispatch_once_tpred;staticMyClass*shared=nil;dispatch_once(&pred,^{shared=[[MyClassalloc]init];});returnshared;}当它并不真正支持真正的单例时为什么会更好,而且人们仍然可以使用init创建实例甚至在sharedInstance上进行发布?Apple的方法是防止所有这些情况http://developer.apple.com/library/mac/#documentatio

ios - 调度队列上的 TableView 单元格中填充了错误的数据

我有一个iOS应用程序,它有一个UITableView和包含UIImageView的自定义TableViewCells。该图像是从Web服务加载的,因此在初始加载期间,我会显示“正在加载”图像,然后使用gcd进行分派(dispatch)并获取与该单元格数据匹配的图像。当我使用DISPATCH_QUEUE_PRIORITY_HIGH全局队列执行图像提取时,我偶尔会在tableview单元格中加载错误的图像。如果我使用自己的自定义队列,则会将正确的图像填充到单元格中,但表格View的性能很糟糕。这是代码...//Seeiftheiconisinthecacheif([self.photoC

iphone - 如何处理使用 ios5 中的调度方法将记录上传到服务器

我的本​​地文件中有500条记录。我想使用NSURLConnection中的调度方法将文件上传到服务器。我的想法是记录数达到50,然后使用dispatch_queue以先到先出的方式上传。我该怎么做 最佳答案 由于您有大量文件,因此最好在线程上工作,您可以使用performSelectorInBackground或dispatch_async。dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0ul);dispatch_async

ios - 在一个线程和另一个轮询线程之间共享一个队列

我正在编写一个iOS应用程序,其中多个iDevice可以相互连接并相互发送消息。当iDevice1向iDevice2发送消息时,我希望将该消息插入到iDevice2的队列中。iDevice2上的一个单独的后台线程现在通过这个队列并使消息出队。我的问题有两个,如下所示:实现无限循环(直到应用程序终止)并从队列中轮询和出列项目的后台线程的最佳方法是什么?在循环后台线程和将消息插入队列的线程之间共享队列的最佳方法是什么?我一直在使用dispatch_asyncgrandcentraldispatch方法在不同的线程中执行任务,并且效果很好。我应该使用dispatch_async方法来启动轮询

iphone - dispatch_async 中的自定义 block

这段代码有效[[MyManagersharedManager]makeRequestAndParsingfor:someParameterssuccess:^(NSDictionary*dictionary){//SucessfulresponseNSLog(@"Success!!");}failure:^(NSError*error){//ErrorresponseNSLog(@"Failure!");}];但是每当我在后台运行相同的程序时,它永远不会进入成功或失败block。dispatch_async(dispatch_get_global_queue(DISPATCH_QUEU

ios - 在 UICollectionView 中终止异步 CGImageRef 加载

我有一个模拟封面流程的CollectionView。它像这样从ALAssetLibrary异步加载图像。-(UICollectionViewCell*)collectionView:(UICollectionView*)cvcellForItemAtIndexPath:(NSIndexPath*)indexPath;{myCell*cell=[cvdequeueReusableCellWithReuseIdentifier:@"CELL_ID"forIndexPath:indexPath];dispatch_async(dispatch_get_global_queue(DISPATC

iOS View Controller 生命周期

我在基于map的应用程序中遇到了一些奇怪的行为。我正在获取一些数据以使用某些路线服务显示路线。它使用GCD在后台线程中运行。获取数据后,我返回到主线程以更新UI:dispatch_async(dispatch_get_main_queue(),^{[self.mapProvideraddToExistingPolyLinePoints:coordinateswithTitle:@"line"removeOldOne:NOuseCurrentIndex:NO];[_distanceLabelsetText:[NSStringstringWithFormat:@"%.2lfkm",[sel