Tag: asynchronous

由于等待,dispatch_semaphore_signal从不被执行

我想拍两张照片,并希望它们按顺序运行。 捕获图片的方法是使用asynchronous运行的方法完成的。 我目前使用信号量试图同步这个,但它停止运行的程序。 我相信这是因为completionHandler在同一个线程上运行,并且由于线程被locking,它不能执行释放信号量。 这是我现在的代码: camera_sema = dispatch_semaphore_create(0); [photoOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error) { [flash turnOffFlash];//turning off flash for second picture //perform needed work dispatch_semaphore_signal(camera_sema); }]; dispatch_semaphore_wait(camera_sema, DISPATCH_TIME_FOREVER); 有没有一种方法,我可以使用dispatch_async这种情况下,或者在另一个后台线程上运行completionHandler的方式,以便能够执行? 更新1:这工作,但不知道,如果它是最好的办法做到这一点。 -(void*)method: (int) iteration { [photoOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error) { [flash turnOffFlash];//turning off flash for second picture //perform needed work //base case [method: […]

在iOS 5中使用平静的Web服务

在我的第一个ViewController(MonitorViewController)这是在接口文件MonitorViewController.h: #import <RestKit/RestKit.h> @interface MonitorViewController : UIViewController <RKRequestDelegate> 在MonitorViewController.m ViewDidLoad方法中,我在最后: RKClient* client = [RKClient clientWithBaseURL:@"http://192.168.2.3:8000/DataRecorder/ExternalControl"]; NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]); [client get:@"/json/get_Signals" delegate:self]; 在MonitorViewController.m中实现委托方法: – (void) request: (RKRequest *) request didLoadResponse: (RKResponse *) response { if ([request isGET]) { NSLog (@"Retrieved : %@", [response bodyAsString]); } } – (void) request:(RKRequest *)request […]

如何在iOS中asynchronous下载图像?

我想先创buildimageview到滚动view.there我设置的占位符图像或给imageview.so的背景颜色所有图像视图显示。 – (void)LoadDataInScrollView { dispatch_queue_t imageQueue = dispatch_queue_create("Image Queue",NULL); //totalImageGetDict into count total Number of object and generate imageview. for (int ivalue = 0; ivalue < [totalImageGetDict count]; ivalue++) { dispatch_async(imageQueue, ^{ //define x value CGFloat xOrigin =ivalue *ascrollView.frame.size.width+50; imageView = [[UIImageView alloc] init]; imageView.tag = ivalue; [imageView setBackgroundColor:[UIColor whiteColor]]; imageView.frame = CGRectMake(xOrigin-40,imgYpos, ascrollView.frame.size.width-20, scrollViewHight); […]

如何在下载前检查是否有新版本的图像?

我有一些存储在我的WebServer中的图像。 所以我总是希望用户打开应用程序或刷新,检查是否有可用的新版本的图像,如果是,请下载它? 我已经尝试https://github.com/Julioacarrettoni/iOS-ImageManager ,但它不工作,它不断重新加载视图。 谢谢,

Swift:主界面冻结即使一切都在asynchronous线程? URLsession?

我仍然得到了asynchronous/后台线程的挂钩,但我不知道什么是这个调用。 基本上我正在build立一个播客播放器,在一个URLSession中从一个RSS feed中传输audiom4as。 我的问题是尽pipe把所有我能想到的,尤其是实际的AudioPlayerManager.shared.play(asynchronousfunc,UIbutton仍然冻结时,轨道是“初始化”,意思是试图播放。这是一个问题,因为它冻结整个应用程序,如果这些糟糕的连接,或者你有什么 – 这个UI挂起总是会发生,但是不同的时间,即使RSS提要没有时间parsing,没有挂起。 我正在使用GitHub库( https://github.com/tschob/AudioPlayerManager )来执行此操作。 这里是我每次查看(它的一个标签栏VC选项卡)出现的代码,它调用startup funcasynchronous: override func viewDidAppear(_ animated: Bool) { { //these should always happen, MUST BE in view did appear loadIndicator.isHidden = false overallNavigator.animateMediaBar(inPos: false) if(originalUrl != currentTrackUrl) //new m4a { print("NEW TRACK") trackStatus = .Initializing playModeStreaming = true } if(adURL == "" || adURL == nil) […]

iOS – 连接asynchronous的基于块的操作

你将如何执行N个asynchronous操作,例如networking调用,处理完成块操作以及没有委托/通知? 鉴于N这样的方法: – (void)methodNWithCompletion:(void (^)(Result *))completion { Operation *operation = [Operation new]; // … // Asynchronous operation performed here // … return; } 一个简单的解决scheme是调用前一个完成块中的每个操作: [self method1WithCompletion:^(Result *result) { // … [self method2WithCompletion:^(Result *result) { // … [self method3WithCompletion:^(Result *result) { // … [self method4WithCompletion:^(Result *result) { NSLog(@"All done"); } } } } 但我正在寻找一个更优雅和可重用的解决scheme,更容易编写和维护(没有多less缩进块)。 非常感谢,DAN

即使在dispatch_async上,UILabel也不会更新

任何理由为什么我的标签不会更新? – (void)setLabel:(NSNotification*)notification { dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"setLabel"); [self.label setText:@"My Label"]; }); } 我也尝试使用performSelectorOnMainThread无济于事。 请注意,setLabel出现在日志中。 附加信息: 我也有两个其他的function,只是用不同的文本做同样的事情。 另外两个函数没有dispatch_async,但都起作用。 另外,两个工作函数的通知是由NSURLConnection(本文中的方法#2)发送的。 虽然上面的非工作函数的通知是通过调用FBRequestConnection发送的(请参阅本文 )。 为了清楚起见,我的另外两个工作职能如下: – (void)setLabel2:(NSNotification*)notification { NSLog(@"setLabel2"); [self.label setText:@"My Label 2"]; } – (void)setLabel3:(NSNotification*)notification { NSLog(@"setLabel3"); [self.label setText:@"My Label 3"]; } 是的,我尝试删除我的代码中的dispatch_async。 事实上,原来没有dispatch_async,因为其他两个工作。

如何在没有达到全球GCD限制的情况下并行执行许多(100+)任务?

问题是 : 当在后台中延迟加载100个图标列表时,我点击了GCD线程限制(64个线程),这导致我的应用程序在主线程上通过semaphore_wait_trap冻结。 我想重构我的线程代码,以防止这种情况发生,同时仍然加载图标asynchronous,以防止UI阻塞。 背景 : 我的应用程序加载了一个SVG图标的屏幕。 金额平均从10-200不等。 通过使用本地SVG图像或远程SVG图像(如果它具有自定义图标)绘制图标,然后对它们进行后处理以获得最终的图像结果。 因为这需要一些时间,而且对用户来说不是至关重要的,所以我想在后台加载和后处理它们,所以它们会随着时间的推移而popup。 对于每个图标我使用以下内容: dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(concurrentQueue, ^{ //code to be executed in the background SVGKImage *iconImage = [Settings getIconImage:location]; dispatch_async(dispatch_get_main_queue(), ^{ //code to be executed on the main thread when background task is finished if (iconImage) { [iconImgView setImage:iconImage.UIImage]; } }); }); getIconImage方法处理基本SVG的初始加载,如果它是本地的,它将与[NSInputStream inputStreamWithFileAtPath:path]同步读取,如果它应该远程加载, […]

Swift Serial Dispatch Block只有在委托之后才能完成

这是很难解释的。 我正在创build一个串行队列来处理我的应用程序中的一些工作。 想象一下,我做这样的事情: dispatch_async(myQueue, { () -> Void in self.SendSMS(); }); dispatch_async(myQueue, { () -> Void in self.SendEmail(); }); 现在我想要做的只是在委托(SendSMS委托)完成工作之后调用self.SendEmail。 有一个简单的方法来做到这一点? 非常感谢

混合同步/asynchronous与串行/并发队列时,调度程序如何工作?

在Grand Central Dispatch中,在使用dispatch_sync函数和dispatch_async函数时, dispatch_sync如何使用不同的队列( serial和concurrent )?