最后更新:2017-12-12 dispatch_sync 与 dispatch_barrier_sync https://github.com/rs/SDWebImage/pull/818 The reason why we are doing dispatch_barrier_sync and dispatch_sync is to synchronise the access to the NSMutableDictionary that is not thread-safe, accor…
写在开头: 本文旨在阐述一些大家容易产生迷惑的GCD相关内容,如果是需要了解一些GCD概念或者基础用法,可以看看这两篇文章:GCD 扫盲篇.巧谈GCD . 目录: 迷惑一:队列和线程的关系 迷惑二:GCD的死锁 迷惑三:以下这些API的异同与作用场景: dispatch_async.dispatch_sync.dispatch_barrier_async.dispatch_barrier_sync 迷惑一:队列和线程的关系 错误理解: 有些人会产生一种错觉,觉得队列就是线程.又有些人会有另外一种…
1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信息和内存映像,这样就能够通过解析这些信息进而定位crash发生时的代码逻辑,从而找到App闪退的原因.通常来说,crash产生来源于两种问 题:违反iOS系统规则导致的crash和App代码逻辑BUG导致的crash,下面分别对他们进行分析. 违反iOS系统规则产生crash的三种类型: (1) 内…
1.如何追踪app崩溃率,如何解决线上闪退 当iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈跟踪信息和内存映像,这样就能够通过解析这些信息进而定位crash发生时的代码逻辑,从而找到App闪退的原因.通常来说,crash产生来源于两种问题:违反iOS系统规则导致的crash和App代码逻辑BUG导致的crash,下面分别对他们进行分析. 违反iOS系统规则产生crash的三种类型 (1) 内存报警闪…
Grand Central Dispatch,或者GCD,是一个极其强大的工具.它给你一些底层的组件,像队列和信号量,让你可以通过一些有趣的方式来获得有用的多线程效果.可惜的是,这个基于C的API是一个有点神秘,它不会明显的告诉你如何使用这个底层组件来实现更高层次的方法.在这篇文章中,我希望描述那些你可以通过GCD提供给你的底层组件来实现的一些用法. 后台工作 也许最简单的用法,GCD让你在后台线程上做一些工作,然后回到主线程继续处理,因为像那些属于 UIKit 的组件只能(主要)在主线程中使用…
GCD 分为异步和同步 异步: dispatch_async ( 参数1 , { } 同步: dispatch_sync( 参数1 , { } 参数1 :队列 队列分为两种: dispatch_get_globle_queue(0,0) 全局队列dispatch_get_main_queue()主队列 全局队列 : 系统为程序员提供的队列 执行时机 : 在系统主线程空闲时才会执行 主队列: 系统在执行主线程时执行 执行时机 :一般从分线程跳转到主线程需要使用 主队列 全局队列和异步配合使用 主队…
GCD 分为异步和同步 异步: ```objc  dispatch_async (  参数1  , {      } 同步: dispatch_sync( 参数1   , {   } ``` ###参数1 :队列   队列分为两种:  **dispatch_get_globle_queue(0,0) **全局队列**dispatch_get_main_queue()**主队列   全局队列  : 系统为程序员提供的队列  执行时机 : 在系统主线程空闲时才会执行 主队列: 系统在执行主线程时执行…
Grand Central Dispatch大中枢派发:joy: 或俗称 GCD 是一件极其强大的武器.它为你提供了很多底层工具(比如队列和信号量),你可以组合这些工具来实现自己想要的多线程效果.不幸的是,这些基于 C 的 API 晦涩难懂,此外将低级工具组合起来实现高抽象层级 API(译者注:类似于 NSOperation)也不是一件容易的事.在这篇文章中,我会教大家如何利用 GCD 提供的工具来实现高抽象层级的行为. 英文原文 后台执行 这或许是 GCD 提供的最简单的工具了,你可以在后台线…
GCD 确实好用 ,很强大,相比NSOpretion 无法提供 取消任务的功能. 如此强大的工具用不好可能会出现线程死锁. 如下代码: - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"=================4"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"=================5"); }); NSLog(@"===…
GCD 确实好用 ,很强大,相比NSOpretion 无法提供 取消任务的功能. 如此强大的工具用不好可能会出现线程死锁. 如下代码: - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"=================4"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"=================5"); }); NSLog(@"===…