dispatch_sync死锁问题分析

示例代码

1
2
3
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"11111");
});

在按钮的响应事件中执行如下代码,会造成死锁,简单分析一下死锁的原因:

dispatch_sync 是同步执行,该方法会阻塞线程,等到block内容执行完之后,其后面的代码才有机会执行。

如上代码,dispatch_sync将block任务提交到主队列中,等待执行。

我们知道,主队列是一个串行队列,串行队列的特点是先进先出。对于iOS而言,主队列有很多任务要执行,基本没有可能当你执行上面代码的时候,主队列中没有任何任务。

假设,执行到上述代码的时候,主队列里有3个待执行任务,这时将第四个任务(也就是上述代码的Block),提交到主队列。这时候,主队列中有四个任务,主队列要先执行前三个任务,才能执行第四个任务,但是dispatch_sync阻塞函数,主队列要先执行完第四个任务,主队列才有时机去执行前三个任务。所以代码处于死锁状态。

ios架构学习-View层

概述

最近在读casatwy的博客,收获良多,从中学习了很多知识,本文一方面是梳理自己学到的知识,另一方是形成自己的代码风格。本文重度参考casatwy的博客,参考以及相关阅读模块贴出来相关链接,都是极其优秀的文章,希望你也能从中有所收获。

Read More

2018年度计划

未来

###生活
今年可能是我生活变化最大的一年,我结婚了。2018年2月14日,我和我的女朋友领证。婚姻意味着自己不能洒脱不计后果的生活了,身上莫名的多了一份责任,有时候不自觉的去考虑家庭、房子、车子、父母、孩子这些问题,有时候会莫名的沮丧,压力好大,有时候莫名的充满激情,生活真美好。不知道是自己年纪大了,还是怎地,以前只会不顾后果的干,现在却考虑考虑,犹豫犹豫。不管怎样,生活对于我已经不薄了,我把最爱的女朋友变成了老婆。18年,我不希望生活有巨大的改变,稳稳当当的度过我这一年就好。当然还是要定一些小目标。

Read More

iOS电池相关API

iOS电池相关API

iOS系统中关于电池的Api较少,据本人了解目前仅有两种电视相关的Api,一种是电量状态,一种是电池状态。

开启电池监听

在使用电池相关API的时候需要先开启电池监听,开启代码如下:

1
UIDevice.current.isBatteryMonitoringEnabled = true

Read More

WKWebView使用小感

前言

Apple 在iOS8上发布了WKWebView, 旨在替代UIWebView, 然后到目前为止在WKWebView的使用上依然有很多坑。本文主要记录一下最近关于WKWebView使用上的一些感想。欢迎读者留言并讨论,共同提高我们的开发效率。

WKWebView的优势

  • 相比较于UIWebView其更加高效,内存占有率更低。
  • 比较方便的实现滑动返回功能。
  • 在JS代码注入方法,特别是向Frame里面注入JS有较高的优势。

    Read More

iOS屏幕适配

适配的关键

对于大多数开发者而言,UI的开发流程是:设计师出图 ->还原设计师效果图。问题是:设计师一般只会给一套设计图,基于6或者6p,其他设备上的显示信息需要开发者自己去做调整。所以个人觉得还原设计图之前要与设计师进行充分的沟通,在不同屏幕上,字体、元素宽高,元素间距等信息如何处理。只有你们定好了规范,你才能在不同的屏幕上做到还原设计师的设计意图,而不会重复返工修改UI。

屏幕适配包含哪些内容

  • 字体适配
  • 距离适配
  • 图片适配

Read More

iOS_Run_Loop事件监听

Run Loop监听事件列表

  1. run loop的入口事件。
  2. run loop即将处理计时器事件。
  3. run loop即将处理输入源事件。
  4. run loop即将休眠。
  5. run loop已经被唤醒,但是还没有处理唤醒它的事件。
  6. run loop 退出。

Read More