浅谈iOS程序员的成长和进阶
iOS 高级工程师是如何进阶的
说实话这个话题说的有点大了,其实我有时候也是非常的迷茫的,工作忙的时候还能跟着工作的节奏走,闲下来时间一长就有点迷茫,不知做什么。这当然是非常恐怖的了,所以现在在迷茫过、在不知所措过之后,想想还是应该写写文章屡屡思路再上路,希望自己能养成好的习惯坚持下去。
首先工作过两年的工程师,只会搭建 View、使用第三方类库,真的不能称作一个合格的 iOS 开发工程师,下面我从几个方面来说一下需要有什么样的提高
-
- {aa5aa}
- {aa4aa}
- {aa3aa}
- {aa2aa}
- {aa1aa}
- {aa0aa}
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 知识结构图:
来源: http://www.cnblogs.com/xiaoyouPrince/p/6433696.html