草庐IT

GCD_pair

全部标签

ios - 使用 GCD 在后台创建 UIKit 对象是一种不好的做法吗?

正如bbum指出的那样here,文档说:“在大多数情况下,UIKit类应该只在应用程序的主线程中使用,这对于派生类UIResponder尤其如此,或者涉及以任何方式操作应用程序的用户界面。”em>".我以为我理解了绘图的方法不能在后台线程中调用,所以创建可以在后台完成,因为drawRect方法只有在添加View时才会调用。但也许我错了。综上所述,这种代码有风险吗?dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0ul);dispatch_async(queue,^{NSString

iphone - 如何使用 GCD 在主线程延迟后安全地调度代码?

如果您已经在主线程上,在主线程上延迟分派(dispatch)代码块是否安全?dispatch_time_tpopTime=dispatch_time(DISPATCH_TIME_NOW,seconds*NSEC_PER_SEC);dispatch_after(popTime,dispatch_get_main_queue(),theBlock);或者有更安全的方法吗?执行此操作时是否必须执行任何检查是否已经在主队列(主线程)上? 最佳答案 如果block异步入队,您通常不必检查您是否已经在主线程上,whichdispatch_aft

ios - GCD、NSThread 和 performSelector :onThread: issues

我正在尝试调试一些包含以下错误消息的iOS崩溃日志:***Terminatingappduetouncaughtexception'NSDestinationInvalidException',reason:'***-[SomeClassperformSelector:onThread:withObject:waitUntilDone:modes:]:targetthreadexitedwhilewaitingfortheperform代码的相关部分是:-(void)runInvocationOnMyThread:(NSInvocation*)invocation{NSThread*c

objective-c - 串行调度队列中的 block 未执行 - GCD iOS Objective-C

我有一个for循环将block排队到主队列,如下所示:for(intx=0;x只有第一个block被执行。我已验证该循环工作正常,它循环了正确的次数并且没有引发异常或错误。 最佳答案 使用这段代码:for(intx=0;x“Blah”登出5次。我猜你发布的代码与你在应用程序中的代码不一样?我不得不添加);到dispatch_after调用结束。 关于objective-c-串行调度队列中的block未执行-GCDiOSObjective-C,我们在StackOverflow上找到一个类似

ios - 这是比较两个 GCD 队列的正确方法吗?

继之前关于SO的问题之后,我现在正在比较两个不同的大中央调度队列,以尝试确定当前代码是否在主线程上运行。我的问题很简单:这是实现这一目标的有效方法吗?还是这样做有一些我没有考虑过的陷阱?if(dispatch_get_current_queue()!=dispatch_get_main_queue()){//Wearecurrentlyonabackgroundqueue}else{//Weareonthemainqueue}干杯 最佳答案 将当前队列与主队列进行比较并不是检查您是否在主线程上运行的有效方法。使用[NSThreadi

iOS - GCD 对 self 的弱引用和强引用

当我在GCD的一个block中时,我总是使用__weak对self的引用。每个人都建议这样做。我知道在GCD中对self(tested)的强引用不会产生保留周期。Apple建议使用__weak对self的引用,然后使用__strong对_week的引用以保证self在block执行时不会是nil。我有以下代码:-(IBAction)startGCD:(id)sender{GCDVC*__weakweakSelf=self;[self.activityIndicatorstartAnimating];dispatch_async(dispatch_get_global_queue(DIS

objective-c - 并发访问 GCD 中的单个 FFTSetup 数据结构

是否可以创建一个单个FFTSetup数据结构并使用它同时执行多个FFT计算?像下面这样的东西会起作用吗?FFTSetupfftSetup=vDSP_create_fftsetup(16,//vDSP_Length__vDSP_log2n,kFFTRadix2//FFTRadix__vDSP_radix);NSAssert(fftSetup!=NULL,@"vDSP_create_fftsetup()failedtoallocatestorage");for(inti=0;i我想答案取决于以下考虑因素:1)vDSP_fft_zrip()是否仅以“只读”方式访问fftSetup中的数据(或

ios - 如何在 GCD 的 runloop 中安排事件

我正在尝试连接到自定义GCD队列中的服务器。我就是这样做的。-(void)initNetworkCommunication{if(!self.connQueue){self.connQueue=dispatch_queue_create("connection_queue",NULL);}dispatch_async(self.connQueue,^(void){if(self.inputStream==nil&&self.outputStream==nil){CFReadStreamRefreadStream;CFWriteStreamRefwriteStream;NSString*

ios - 为什么 UIViewController.UIView 对子 UIViewLabel 的约束抛出错误 "Invalid pairing of layout attributes"?

我试图放置一个标签,使标签的顶部位于UIViewController下方的2/3处。所以我写了这个约束,但它给了我下面的错误。NSLayoutConstraint*labelTopConstraint=[NSLayoutConstraintconstraintWithItem:self.myLabelattribute:NSLayoutAttributeToprelatedBy:NSLayoutRelationGreaterThanOrEqualtoItem:self.viewattribute:NSLayoutAttributeHeightmultiplier:0.66constan

ios - GCD取消异步 block ?

我有在表格View单元格中加载图像的常规代码dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0),^{NSImage*image=file.image;dispatch_async(dispatch_get_main_queue(),^{imageView.image=image;});});问题是当我滚动得太快时,我可以看到最后一个block在同一个imageView上多次触发。这看起来真的很奇怪。有什么办法可以在安排新操作之前取消所有以前为一个imageView安排的操作(假设它