草庐IT

dispatch_release

全部标签

ios - dispatch_sync 比@synchronized 有什么优势?

假设我想让这段代码成为线程安全的:-(void)addThing:(id)thing{//Canbecalledfromdifferentthreads[_myArrayaddObject:thing];}GCD似乎是实现这一目标的首选方式:-(void)addThing:(id)thing{dispatch_sync(_myQueue,^{//_myQueueisserial.[_myArrayaddObject:thing];});}与传统方法相比,它有什么优势?-(void)addThing:(id)thing{@synchronized(_myArray){[_myArraya

iphone - Grand Central Dispatch 异步与同步

这个问题在这里已经有了答案:DifferencebetweenDispatchQueue.main.asyncandDispatchQueue.main.sync(4个答案)关闭3年前。我正在阅读有关GCD调度队列的文档,其中他们说队列是FIFO,所以我想知道这对异步/同步调度有什么影响?根据我的理解,异步按照它获取事物的顺序执行事物,而同步则串行执行事物。但是当您编写GCD代码时,您决定事情发生的顺序。所以只要您知道代码中发生了什么,您就应该知道事情执行的顺序。我的问题是,异步的好处在哪里?我对这两件事的理解是否遗漏了什么。

ios - 取消 dispatch_after() 方法?

这个问题在这里已经有了答案:Preventdispatch_after()backgroundtaskfrombeingexecuted(11个答案)关闭7年前。有没有办法取消dispatch_after()计划在未来的某个时间,并且到目前为止还没有解雇?我正在尝试为来自服务器的更新制作一个类似于调度程序的东西,这种方法就像我想要的那样,但是,我很想在某个时候取消并重新安排它。完全有可能还是我必须回退并使用NSTimer?

ios - 自动 ARC 转换后 : Assigning retained object to unsafe property; object will be released after assignment

我刚刚使用Xcode的自动重构将一个旧项目转换为ARC。@property(nonatomic,retain)NSMutableArray*cards;被替换为:@property(nonatomic)NSMutableArray*cards;这是有道理的,因为我读到的是“强”是默认状态。但是,以下行在标题中给我错误:self.cards=[[NSMutableArrayalloc]initWithCapacity:54];通过在原来保留的位置添加strong来解决错误:@property(nonatomic,strong)NSMutableArray*cards;但是...如果我需要

ios - main_queue 上的 dispatch_async?

我看过这段代码:dispatch_async(dispatch_get_main_queue(),^{[selfdoSomeNetworkStuff];});这对我来说似乎没有多大意义。编辑:澄清我的问题的条件:对dispatch_async的调用是从主线程执行的。发送的消息doSomeNetworkStuff是繁重的worker任务。...并且不仅仅是UI更新任务。当然可以调度,但是使用主队列只会将调度的任务拉回ui线程并阻塞它。拜托,我错过了什么吗?谢谢。 最佳答案 dispatch_async让您的应用在多个队列上运行任务,因

ios - 您如何调试 iOS 中 Release模式构建的问题?

我正在开发一个iOS应用程序,我注意到一个错误,该错误只有在应用程序以Release模式构建时才会重现。我发现运行我构建的Release模式应用程序的唯一方法是构建一个存档,使用我的调试配置文件对其进行签名,然后对我的设备进行临时部署。但是,使用这种方法我无法附加调试器,而且我什至不确定我是否可以附加它,如果它在发布版本对代码运行优化器后能正常工作的话。有谁知道调试只有在Release模式下构建应用时才能重现的问题的好方法? 最佳答案 通常调试版本禁用优化(-O0)以使调试更容易,而发布版本启用优化(-O3或-Os),这使代码运行得

ios - Grand Central Dispatch 中线程限制的解决方法?

与GrandCentralDispatch,可以轻松地在非主线程上执行耗时任务,避免阻塞主线程并保持UI响应。只需使用dispatch_async并在全局并发队列上执行任务即可。dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{//code});但是,有些事情听起来好得令人难以置信,就像这个通常有其缺点。在我们的iOS应用程序项目中大量使用它之后,最近我们发现它有64个线程的限制。一旦我们达到限制,应用程序将卡住/挂起。通过使用Xcode暂停应用程序,我们可以看到主线程被semap

iOS GCD : Difference between any global queue and the one with background priority (DISPATCH_QUEUE_PRIORITY_BACKGROUND)?

我正在阅读ConcurrencyProgrammingGuide事情让我感到困惑。我看到很多代码为任何后台任务调用以下内容:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);现在我所说的“背景”是通俗的意思:在主(UI)线程以外的任何地方执行的东西所以按照文档,上面的语句返回任何具有不同优先级的非主线程队列。我的问题是-为什么DISPATCH_QUEUE_PRIORITY_BACKGROUND存在?最近我还看到许多使用DISPATCH_QUEUE_PRIORITY_BACKGROUND的异步任务专门执行后台任务。队

iphone - 如何替换已弃用的方法 dispatch_get_current_queue()?

这个问题在这里已经有了答案:Alternativestodispatch_get_current_queue()forcompletionblocksiniOS6?(7个答案)关闭8年前。我正在iOS5中使用xmppframework开发一个聊天应用程序;它完美地工作。但我将我的Xcode更新到4.5.1,将iOS5更新到iOS6,将我的MacOS更新到10.7.5,但由于弃用问题,该项目无法运行。我用iOS6中的新方法替换了所有方法,除了这个:dispatch_get_current_queue()如何在iOS6中替换此方法?

ios - 如何在不使用 dispatch_get_current_queue() 的情况下验证我是否在给定的 GCD 队列上运行?

最近,我需要一个函数来保证在特定的串行调度队列上同步执行给定的block。有可能从该队列上已经运行的某些东西调用此共享函数,因此我需要检查这种情况,以防止同步调度到同一队列的死锁。我使用如下代码来执行此操作:voidrunSynchronouslyOnVideoProcessingQueue(void(^block)(void)){dispatch_queue_tvideoProcessingQueue=[GPUImageOpenGLESContextsharedOpenGLESQueue];if(dispatch_get_current_queue()==videoProcessin