iOS高级工程师是如何进阶的
说实话这个话题说的有点大了,其实我有时候也是非常的迷茫的,工作忙的时候还能跟着工作的节奏走,闲下来时间一长就有点迷茫,不知做什么。这当然是非常恐怖的了,所以现在在迷茫过、在不知所措过之后,想想还是应该写写文章屡屡思路再上路,希望自己能养成好的习惯坚持下去。
首先工作过两年的工程师,只会搭建View、使用第三方类库,真的不能称作一个合格的iOS开发工程师,下面我从几个方面来说一下需要有什么样的提高
- ** iOS高级工程师是如何进阶的**
- OC部分
- UI部分
- 还有一些大的功能点
- 其他专业化的方向
- 项目安全优化等
- 知识体系要持续更新
OC部分
- 既然做了两年的开发了,对objc有足够的了解吗?objc和c的区别是什么,它是如何基于c来进行封装的?下面代码是什么意思?
typedef __attribute__((NSObject))CGGradientRef GradientObject;
@property(nonatomic,strong)GradientObject storedGradient;
- objc的内存管理真的掌握清楚了吗?为什么对象用指针来操作?对象需要内存管理而基本数据类型不用呢?它们在内存中又是如何存储呢的?objc里面的自动释放池又是如何创建和管理的呢?
- protocol、category、extension和delegate这类的东西应该是手到擒来才是,你是不是已经彻底掌握了?notification,Userdefault和简单的文件存储是不是都很熟悉呢?
- 多线程网络的知识点掌握的是否扎实?https等各种网络加密的知识是否够了解?能自己搭建服务器吗?有没有使用Charles抓过其他app的网络包进行分析过呢?
- runtime黑魔法有过了解吗?它的消息机制又是如何做的呢,能在开发中做一些什么高级的事情呢?
- 程序启动过程,为什么能一直运行?runloop又是怎样的?
- 代码的封装性是不是足够好呢?有没有足够优雅、后续维护容易吗?各种设计模式使用的如何?
UI部分
- 既然写了两年的UI,那么能快速仿造市面上这些主流app的UI吗?使用过Reveal去分析过微信、豆瓣、网易云音乐、QQ、淘宝、支付宝等应用的UI吗?复制一个类似的你需要多长时间呢?有么有自己的一套UI框架能快速完成一个app的呢?
- UI研究稍微深一点,比如侧滑菜单这种要如何实现,类似饿了么的两级联动菜单呢?如何你要实现应该要了解UIView和UIViewController,UIViewController和UINavigationController的关系了吧?我勒个草,UIView一堆方法,UIViewController一堆方法,到底都是干嘛的啊?你难道不好奇吗?这块知识点一直是你的盲区,你能忍?我忍不了!
- UIView往深了看、下面还有CALayer,你研究过没?为什么修改CAlayer的某些property默认会有个动画产生呢?
- 那么Animation、UIKit Dynamics、Drawing、Graphics这些随便拎出来一个,够你研究一阵子了吧 ?你看看比如网易新闻,在新闻详情页面上拉,回到新闻列表页面这个动画做的出来吗?你看看QQ在电话通信页面,点击右下角缩放图标,缩放成一个头像的这种动画你会做不?
还有一些大的功能点
- 既然用了两年三方类库,那么比如图片缓存之类,你看过源代码吗?如果你自己来实现的话,有哪些Caching Algorithms?该怎么取舍?各种常用的第三方类库你研究过原理没?
- 你的app在和服务器交流数据的过程后中安全性怎么样?你是不是要研究一下加解密?http理解的够清楚吗?有没有想过自己来写接口?或者更甚一些,自己来写一个简易的http服务器?接口部分甚至用CGI来实现也可以啊 !
- 要写服务器,那应该要了解一下网络部分吧?TCP/IP 协议得熟悉吧,然后Wireshark各种抓包得会吧?
- 网络这块顺带过来之后,即时通信类的app采用的什么技术?选xmpp还是mqtt还是自己写?正好可以顺势了解一下吧?
- iOS SDK里面的各种API你掌握到了什么程度?这些功能模块排除地图、通讯录这种,说些高级的比如CloudKit、Extensions、AirDrop、PassKit?觉得这些模块在自家公司的项目中压根没有用过?可是看看你手边的app!
其他专业化的方向
- 音视频处理做过吗?此类诸如豆瓣FM、喜马拉雅、虾米音乐、QPlayer、秒拍视频这类的app你去研究过他们吗?还有VoIP这类的,你掌握到什么程度了?
- 游戏开发方向有没有兴趣?自己有没有去研究过呢?(反正这个我是真的没有╮(╯_╰)╭)
项目安全优化等
- 项目中写单元测试吗?UI Automation自动化测试做的怎么样?持续集成平台诸如Jenkins等会用吗?
- App的各种性能优化、crash的统计分析等等你做了没?
- App本地数据存储够安全吗?你对逆向了解多少,敏感代码是不是做了代码混淆呢?
知识体系要持续更新
- 官方的文档、国外的相关书籍采用的语言都是Swift,难道你不准备学学?除了native的,现在的HTML5也很火啊 ,难道你不准备学学?
- 英文练习的怎么样了,官方所有的开发者文档以及历年的WWDC视频都看完了?这么多书,这么多大牛的技术博客,难道你从中一无所获?
最后附上一张iOS知识框架图