前言
最近看了一些copyWithZone:这个方法相关的一些东西.没想到从这里可以延伸出来很多内容,包括深拷贝,浅拷贝,copy,mutableCopy,NSCopying协议,NSMutableCoping协议,单例等等东西.他们之间要么相互关联,要么环环相扣.也许拿出其中一点来可以说的比较清晰,但是全部合在一起又很乱了.因此写一篇文章来梳理一下这些知识脉络.
最近开始看下《Swift4从零到精通iOS开发》,学习下Swift的语法.也相当于做一个简单的读书笔记.
虽然在毕业前也做过一丢丢的Swift语法学习,但是那个时候还没有接触到任何的iOS开发,当时学起来也是晦涩难懂,所以之前的学习就当作空白归零,现在重新开始新的Swift语法学习.
最近刚刚完成了一个比较大的项目,整体客户端工期是14人天,我投入了10人天,因为服务端已经提前配合安卓上线了,所以整个项目中就是iOS端和测试端的人力投入,这整个项目包括从启动开始到最后渲染包含的东西不少.加之最近也看了好些iOS开发相关的书,我试着把自己学到的一些东西结合实际投入进去.可以感觉到和去年,不,应该是和半年前写代码有一些不同的感触.当然也不是说觉得自己很能写了,而是觉得自己面对一个问题时的思路比以往多了一些.主要表现在当觉得某一个方式实现功能不太方便时,我会尝试其他一些方式.习惯在实现一个复杂功能的时候先列出流程点.工程启动较慢,我就使用自己本地的小demo对一些不是完全把握的点先进行测试.遇到app表现和预期不一致时,不在直接打断点寻找问题,而是先思考一下可能的点,在追代码,然后断点.但是还是有很多需要加强的地方,架构设计这一块还是很模糊,很想把数据和视图隔离开来,总是差点意思.这个还是需要继续加强的. 更明显的点是因为前期把功能点分的比较细致,到后面相互模块间交互时,写起代码来就感觉比以往轻松了,很容易实现模块的相互交互.
按照时间顺序,事件的生命周期包括事件的产生和传递(事件从父控件传递到子控件并找到合适的view)和事件的处理(对于事件的响应).其中的重点是:
当用户触碰了屏幕后,整个事件的传递和响应的流程基本如下:
1、点击到屏幕上的某一点被封装成为触摸事件添加到UIApplication对象的事件队列中.这个队列按照fifo的顺序执行其中的触摸事件.事件出队列时,UIApplication开始寻找一个最佳响应者,过程称为这个过程称为hit-testing.
2、当找到一个最佳响应者后,接下来是事件的传递和响应.事件除了被最佳响应者消耗,还能被手势识别器或者targte-action模式捕捉或者消耗.
3、触摸事件要么会被某个响应对象捕获后释放,要么没有找到能够响应的对象,最终被释放.
和匹配侧的各位同学一起维护动态item已经有一段时间了,一开始接触感觉这个东西很高深莫测,随着接触时间的增加,相关业务开发的处理,算是对动态item整个渲染过程有一些理解.在这里写一篇日志记录一下.
动态item以更加快速的构建用户ui视图,可以降低app发版诉求甚至在一些场景下可以免于app发版.
其中快速构建视图是通过动态item提前将描述ui视图结构通过描述性语言事先存放,在渲染阶段通过读取描述性的json文件,使用事先规定好的规则将视图渲染上屏.
让app免于发版是通过将描述文件放置到服务端,通过app冷启动接口下发,这样可以做到增量更新,一些新的需求发布之后,只需修改描述文件中的某一项,不需要改动到native代码,即可完成视图的渲染,降低了发版次数.
本文参考自《iOS开发项目化经典教程》第一章,主要讲述iOS实现多线程的四种方式,线程间的安全和通信,GCD的基本操作。NSOperation的基本操作。
多线程概念:由于一个线程同一时间内只能处理一个任务,因此一个线程内的任务需要按顺序执行。因此在遇到网络请求,下载等耗时操作时,需要等待此类操作结束才能进行接下来的操作,这段时间内用户不能进行任何操作,app也不会响应用户的操作。这是一种很糟糕的用户体验。因此在开发过程中,通常把比较耗时的操作放到一个线程中,把和用户交互放到主线程中。保证能够及时响应用户的操作行为。
这边博客主要是总结一下最近看到iOS动画开发的一些基础知识。主要包含如下一些知识点。主要参考自《iOS开发实战:从入门到上架APPsotre》
1 | 1、使用UIImageView播放图片组动画 |