iOS触摸事件那点儿事
前言
这两天在实现我的动画库Demo的过程中,遇到一个令我有些疑惑的问题:在parentView
上添加了UITapGestureRecognizer
之后,subview
中的UITableView
实例无法正常响应点击事件了,但UIButton
实例仍可以正常工作,经过一系列查阅资料和实验,终于理解了这是怎么一回事。
接触iOS以来,就一直对性能方面的知识颇感兴趣,但一直没(lan)时(de)间(kan)相关的知识,直到最近阅读了RunLoop相关的代码,也有了解到ASDK的异步绘制最终也是以主线程RunLoop为切入点,将绘制结果最终展示到屏幕上,所以跟着几篇文章,走了走ASDK的源码,希望能搞清楚这个库是如何高效的提升性能的。
最近开发中遇到了一些问题,再次又看起了RunLoop的相关知识,发现“纸上得来终觉浅”,还是得看看源码。首先整理一些比较好的RunLoop概念介绍和入门的文章:
一个视频一篇文章,基本就能对RunLoop的运作机制有个大致了解了,总的来说:
1.RunLoop通常和线程是一对一的关系(一个线程中只能有一个RunLoop,但这个RunLoop中允许有子RunLoop的存在),这点很好理解,因为从源码上来看,RunLoop就是一个do-while的阻塞线程的循环,因此不可能在同一线程中同时有两个RunLoop。
2.iOS中,许多事件管理、分发都与跑在主线程的RunLoop有关(NSTimer的实现,UI绘制的调用,用户交互事件的响应等等),RunLoop把这些事件分为:Timer事件、Source事件(包含source0、source1,source0可以理解为用户级事件,如触摸事件,是不能唤醒RunLoop的,source1是系统级的事件,RunLoop在休眠时监听特定的port,当这些port有消息传来时,RunLoop就会被唤醒。)
借着实习和正式入职之间的间隙,报了个途牛团(我这真不是打广告)去云南玩了一圈,记录一下所见所闻所感。
这里还是不得不小喷一下途牛,由于是散团拼团,所以出团通知在出行前1~2天才发出,由于下订单的时候只留了个手机号,没有留邮箱,所以迟迟没有接到出团通知,打电话咨询了才把机票信息、接机联系人信息发过来(明明可以发短信又留了手机号,结果说没留邮箱所以没发出团信息)。
云南偏北、行程中包含香格里拉、玉龙雪山等高海拔地区,所以大夏天的我一个广东人硬是带上了毛衣秋裤。