`

iOS dispatch_main_async_safe 警告: Implicit declaration of function 'XXX' i

    博客分类:
  • 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

 

 

出现该报错的解决方法是在类的#import之后,@implementation之前加上以下代码即可:

#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,多任务并发执行,自动创建多线程

    标题中的“ios demo”指的是一个iOS平台上的示例应用,该应用展示了如何使用`dispatch_async`进行多任务并发执行。在iOS开发中,通过编写代码示例(demo),开发者可以更好地理解和学习新功能或技术。 `dispatch_...

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

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

    dispatch_group

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

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

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

    dispatch_group包含wait包含forever时长

    两种方式都是模拟任务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_barrier_(a)sync1

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

    dispatch_semaphore two

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

    iOS GCD开发总结整理

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

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

    在iOS开发中,Grand Central Dispatch (GCD) 是一个强大的多线程管理工具,它提供了一种高效的方式来调度和管理并发任务。其中,`dispatch_semaphore`(信号量)是GCD的一个重要特性,用于控制对共享资源的访问,...

    gcdTest下载图片 dispatch_async

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

    dispatch_group包含wait

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

    dispatch_source

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

    ios-dispatch的简单demo.zip

    `dispatch_barrier_async`函数将任务作为屏障任务提交,这样可以确保所有之前的并发任务执行完毕,然后再执行屏障任务,最后执行屏障任务之后的所有并发任务。 4. `dispatch_source`: `dispatch_source`是GCD提供...

    GCD常用和不常用API说明GCD-Demo-master.zip

    在iOS和macOS开发中,Grand Central Dispatch(GCD)是一种强大的多线程技术,用于管理应用程序的并发性。GCD是Apple的C语言库,它抽象了底层的线程和处理器细节,使得开发者可以更方便地利用多核处理器的优势。本...

    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-dispatch的简单demo_.zip

    `dispatch_barrier_async`是一种同步机制,它允许在执行一组并发任务后执行一个屏障任务。屏障任务会在所有并发任务完成后才执行,确保在执行屏障任务之前,所有并发任务都已完成,从而维护数据一致性。这对于...

    Async.OC:Objective-C中的语法糖,用于Grand Central Dispatch中的异步调度

    异步OC 用Objective-C重写... 代替熟悉的GCD语法: dispatch_async (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 ), ^{ NSLog ( @" A: This is run on the background " ); dispatch_async ( dis

Global site tag (gtag.js) - Google Analytics