如何解决为什么我们在Objective-C中需要dispatch_main_async_safe?
在某些库中,我们可以找到诸如dispatch_main_async_safe
之类的宏定义,例如SDWebImage。有代码:
#ifndef dispatch_main_async_safe
#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_async
会发生什么。如果直接使用dispatch_async
会导致某些错误或崩溃,请举个例子。
感谢任何想法,谢谢。
解决方法
这篇文章应该对您有帮助:http://blog.benjamin-encz.de/post/main-queue-vs-main-thread/。
我认为直接使用dispatch_async
不会导致崩溃。
想象一下在从网络中获取数据后将更新UI的情况,您可能需要检查当前队列是否为主队列,使用宏dispatch_main_async_safe
为在主队列上分配任务提供了便利,并确保接下来的任务将始终在主队列上执行。上面代码的第一步是确定当前队列是否为主队列,主队列必须表示它在主线程中,如果结果为是,则立即执行该块。您可能不需要异步将下一个任务分派到主队列。
否则,您必须异步将下一个任务分派到主队列。
如上所述,主线程可以在其中运行多个队列。我们应该确保与UI相关的任务始终在主队列上执行。
希望这对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。