一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!

前言:前端

做为从事 iOS 开发好几年的开发者,我见识过 2013-2014 年移动端大热时的疯狂,见识过 2016 年一个 iOS 岗位对应千封简历的疯狂。面试

一个细分的行业从大热到遇冷,仅仅两三年的时间。而现在看到如今市场的变化,感受移动开发进入了一个新的阶段:移动端岗位需求正在快速减小,对从业者的要求愈来愈高。算法

那种培训班三个月出来都能找份月薪过万的工做的事情早就是上古神话了。可是,这只不过意味着志向于从事移动端开发的普通开发者或者普通学校出身的同窗须要更努力一点证实本身。网络

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:638302184,无论你是小白仍是大牛欢迎入驻,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!但愿帮助开发者少走弯路。

就像我十年前读到李开复的博客“二流学校的我该怎么办”里面有一段话:数据结构

毕竟复旦、交大、北大、清华是全部HR都知道的,你说你是某个地方某所小学校里出身的学生。HR可能不是很清楚那所学校的状况,因此对你有些先入为主的偏见,这很正常。毕竟站在公司的立场,他但愿有secure,招人也是件很麻烦的事情。因此他要优先考虑你的背景和资质是否能够胜任或者是彻底超越职位所需的。工具

一旦你能拿出相关的证据(实实在在的)东西,那么即使你出身二流学校你仍然是颇有但愿的。若是你拿不出,那么坐在你旁边的名校生说我毕业于。。。就读于某个专业(这个是他的证据)。在双方都没有实在证据的前提下,那么“读书好”就成了一种支持性的证据,证实他比你优秀。oop

做为普通开发者,必需要有实实在在的东西证实本身的能力,才能在行业里保持竞争力。保持竞争力,不只要有我的奋斗,也要注意行业发展的进程。因此,这个事情就简化成了两个部分:有深厚的 iOS 开发功底;在大前端时代里更好地适应。学习

谈谈对 iOS 开发的认识优化

iOS 应用开发是通用软件开发的一个方向。因此,作好 iOS 开发,须要 iOS 专业知识和通用软件专业知识。debug

上面提到“移动开发还真是什么人都能作”只是说这个行业入门的门槛相对较低而已,若是想在移动端开发有所做为,仍是要努力掌握相关知识的。

UI

不少人可能对移动端开发有一些误解,甚至以为作移动端就是画画 UI 而已。因此在知乎上会有“为何最难不过二叉树的算法出如今面试题中都会被应聘者抱怨?”这样的问题。

额,不懂点算法,有的时候是画很差 UI 的。比方说,图片轮播器是一个很常见的 UI 组件,当在 GitHub 上 搜索时,咱们会发现排名靠前的方案有些是经过将 original dataSource 重复几回的方式来生成一个较大的 UICollectionView, 从而以一种取巧的方式实现轮播的效果。这种方式能够只对 dataSource 作简单的算术运算,而不是使用深拷贝的方式,从而将开销维持在很低的水平上。不过,当咱们懂得基础的数据结构以后,双向链表封装一下,可能会是一个更好的解决方案[ 1,2 ]。

Runloop & Runtime

工做过几年的 iOS 工程师若是出去面试,必定会被问到关于 Runloop 和 Runtime 的问题,这是 iOS 工程师进阶必须懂得的知识。可能有些工程师会抱怨,在平常开发中又不会用到这些东西。这个观点是错误的。

Runloop 能够说是iOS 系统的灵魂。内存管理/UI 刷新/触摸事件这些功能都须要 Runloop 去管理和实现。理解 Runloop 并非必定要在平常开发中调用 CFRunloopRef 或者 NSRunloop 相关的 API, 而是经过学习 Runloop 来理解 iOS 的运行机制,知道本身写下去的代码是怎样运行的,从而带给用户更好的体验。止步于死记硬背以下笔试题的工程师不是好工程师:

关于 ObjC Runtime, 不少人会冠以“黑魔法”的名称,听着就感受很玄乎。作为普通开发者,必须纠正诸如“ObjC Runtime 就是 Method Swizzling” 这样片面的观点。在 category 里为 UIView 添加一个 property 是用到了 Runtime 相关的知识, KVO 也是用到了 Runtime 相关的知识。

若是这些还不够,今日头条“iOS 客户端启动速度优化”了解一下,优化的 tips 包括减小 ObjC 类数量,减小 selector 数量,若是有可能就把 +load() 作的事情延迟到 +initialize 中执行。这些都是和 ObjC Runtime 相关的知识点,理解 Runtime 是可以解决不少实际问题的。

内存管理

“如今都是 ARC 时代了,还谈什么内存管理,让系统本身去管理吧。

ARC 减小了开发者花在内存管理上的时间。ARC 减小了 leaked memory, 而 abandoned memory 出现的场景多见于 self -> block -> self 这样的循环引用,会复制粘贴 weakSelf strongSelf 就能解决。”

在一个大型应用里,可能出现多个对象造成的循环引用,这种内存泄漏一般比较隐蔽,可能须要使用 Instrument 相关工具来定位问题,或者引入第三方库在 debug 阶段发现内存泄漏。

而我相信这些检测内存泄漏的第三方库的做者是在深入理解 iOS 内存管理方式以后才写出来的。

因此,对于普通开发者来讲,理解 ARC 的原理会提升平常开发的质量,增长对本身的代码的信心。

文章的最后

与此同时,留下的才是最美好的,既然你读到这了,相信你也但愿你能改变本身,打败本身!你们一块儿努力,让咱们一块儿加油,在iOS开发的 这条道上越走越远!

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:638302184,无论你是小白仍是大牛欢迎入驻,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!但愿帮助开发者少走弯路。

文章来源于网络,若有侵权,请联系小编删除。

相关文章
相关标签/搜索