`

dispatch_main_async_safe 的宏定义

    博客分类:
  • ios
 
阅读更多

 

 

//这里的判断是否在主线程,之前用的NSThreadisMainThread.但是并不是所有在主线程执行的任务,都是主队列的任务,会导致某些需要主队列运行的库产生问题.VectorKit.

//dispatch_queue_get_label 返回创建队列时为队列指定的标签。主队列标签为: com.apple.main-thread

//如果在主线程内调用dispatch_async(dispatch_get_main_queue(), block),可能会导致block在下一次runloop执行,从而导致更新UI时出错,而且还浪费资源.

//所以如果在主线成,直接执行了.不在才回归.

#ifndef dispatch_main_async_safe    //#if not define 

#define dispatch_main_async_safe(block)\

    if (dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(dispatch_get_main_queue())) {\

        block();\

    } else {\

        dispatch_async(dispatch_get_main_queue(), block);\

    }

#endif

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    dispatch_barrier_(a)sync

    异步和同步的栅栏函数都有以下...2、dispatch_barrier_async:异步栅栏函数会开辟新线程执行block;ispatch_barrier_async将自己的任务插入到queue之后,不会等待自己的任务结束,它会继续把后面的任务插入到queue。

    ios demo,dispatch_async,DISPATCH_QUEUE_CONCURRENT,多任务并发执行,自动创建多线程

    `dispatch_async`是GCD(Grand Central Dispatch)中的一个核心函数,用于在不同的执行队列上异步执行任务,以此实现多线程操作。GCD是苹果公司为解决多核处理器并行计算而引入的一个强大的底层技术,它简化了线程...

    dispatch_group包含wait包含forever时长

    两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都...

    ios demo,主队列,异步调度,手动创建线程,detachNewThreadSelector dispatch_get_main_queue

    例如,当你需要更新UI或执行其他需要与主线程同步的操作时,可以使用`dispatch_async(dispatch_get_main_queue(), ^{ ... })`来异步地将任务添加到主队列。 在实际开发中,结合使用这些方法可以使代码更加灵活和...

    dispatch_group

    两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都...

    线程同步dispatch_barrier_(a)sync1

    这里我们讨论的是GCD(Grand Central Dispatch)中的两种特定类型的线程同步方式:`dispatch_barrier_async` 和 `dispatch_barrier_sync`。它们都是用于在并发队列(concurrent queue)中创建屏障(barrier)任务,...

    ios demo,dispatch_once,单例模式的应用

    在iOS开发中,`dispatch_once`和单例模式是两种重要的设计模式和技术,它们在确保代码执行的线程安全和管理全局唯一实例方面起到关键作用。让我们深入探讨这两个概念及其在实际应用中的工作原理。 首先,`dispatch_...

    dispatch_group包含wait

    以上两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种...

    iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)1

    dispatch_group_create() 创建了一个组,我们可以将任务添加到这个组中,通过dispatch_group_async() 将任务追加到指定的队列,并与组关联。当组内所有任务执行完毕后,我们可以利用dispatch_group_notify() 在同一...

    dispatch_semaphore two

    dispatch_async(queue) { dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER) // 执行任务 dispatch_semaphore_signal(semaphore) } } ``` 在这段代码中,`dispatch_semaphore_wait` 会阻塞超出...

    gcdTest下载图片 dispatch_async

    标题中的“gcdTest下载图片 dispatch_async”涉及到两个主要的iOS编程概念:GCD(Grand Central Dispatch)和异步图像下载。GCD是苹果为多核处理器优化并发编程提供的一种技术,而dispatch_async函数是GCD中用于在...

    iOS GCD中级篇 - dispatch_semaphore(信号量)的理解及使用1

    dispatch_async(queue) { // 获取信号量,如果没有则等待 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER) print("run task 1") Thread.sleep(forTimeInterval: 1) print("complete task 1") // ...

    dispatch_source

    在苹果的GCD(Grand Central Dispatch)框架中,`dispatch_source`是一个强大的工具,用于处理各种系统事件,如文件描述符的变化、定时器、数据读写等。它为开发者提供了一种异步处理事件的方式,使得代码更加简洁、...

    shili2.rar_dispatch_economic dispatch_粒子群 分配_经济负荷_负荷分配

    "shili2.rar_dispatch_economic dispatch_粒子群 分配_经济负荷_负荷分配"这一标题揭示了研究的焦点在于应用粒子群优化算法来解决经济调度,特别是负荷分配的问题。 粒子群优化(Particle Swarm Optimization, PSO...

    dispatch_pytorch_demo.zip

    本教程以"dispatch_pytorch_demo.zip"为示例,旨在帮助初学者掌握PyTorch的核心功能,特别是资源调度在模型训练和评估中的应用。以下将详细介绍其中涉及的知识点。 一、模型训练 在PyTorch中,模型训练通常包括定义...

    iOS GCD开发总结整理

    dispatch_async(dispatch_get_main_queue(), ^{ // 更新UI }); ``` ### 4. GCD的其他特性 **栅栏(Barriers)** 在并行队列中,可以使用barrier任务来设置一个分界点,所有在barrier之前的任务会先执行,barrier...

    pso1.rar_dispatch_dispatch economic_economic dispatch_particle s

    the source code for particle swarm optimization algorithm is given in this file. the source code is for economic dispatch problem which is a power system problem.

    Manifest_Dispatch_Air_Delete_6202_3.xsd

    Manifest_Dispatch_Air_Delete_6202_3

    Manifest_Dispatch_Air_6202_2.xsd

    Manifest_Dispatch_Air_6202_2

    Economic-Dispatch.rar_ABC_Economic-Dispatch_dispatch_economic_ec

    Matlab m file for economic dispatch.

Global site tag (gtag.js) - Google Analytics