iOS高級(jí)工程師是如何進(jìn)階的
說(shuō)實(shí)話這個(gè)話題說(shuō)的有點(diǎn)大了,其實(shí)我有時(shí)候也是非常的迷茫的,工作忙的時(shí)候還能跟著工作的節(jié)奏走,閑下來(lái)時(shí)間一長(zhǎng)就有點(diǎn)迷茫,不知做什么。這當(dāng)然是非常恐怖的了,所以現(xiàn)在在迷茫過(guò)、在不知所措過(guò)之后,想想還是應(yīng)該寫(xiě)寫(xiě)文章屢屢思路再上路,希望自己能養(yǎng)成好的習(xí)慣堅(jiān)持下去。
首先工作過(guò)兩年的工程師,只會(huì)搭建View、使用第三方類庫(kù),真的不能稱作一個(gè)合格的iOS開(kāi)發(fā)工程師,下面我從幾個(gè)方面來(lái)說(shuō)一下需要有什么樣的提高
- ** iOS高級(jí)工程師是如何進(jìn)階的**
- OC部分
- UI部分
- 還有一些大的功能點(diǎn)
- 其他專業(yè)化的方向
- 項(xiàng)目安全優(yōu)化等
- 知識(shí)體系要持續(xù)更新
OC部分
- 既然做了兩年的開(kāi)發(fā)了,對(duì)objc有足夠的了解嗎?objc和c的區(qū)別是什么,它是如何基于c來(lái)進(jìn)行封裝的?下面代碼是什么意思?
typedef __attribute__((NSObject))CGGradientRef GradientObject;
@property(nonatomic,strong)GradientObject storedGradient;
- objc的內(nèi)存管理真的掌握清楚了嗎?為什么對(duì)象用指針來(lái)操作?對(duì)象需要內(nèi)存管理而基本數(shù)據(jù)類型不用呢?它們?cè)趦?nèi)存中又是如何存儲(chǔ)呢的?objc里面的自動(dòng)釋放池又是如何創(chuàng)建和管理的呢?
- protocol、category、extension和delegate這類的東西應(yīng)該是手到擒來(lái)才是,你是不是已經(jīng)徹底掌握了?notification,Userdefault和簡(jiǎn)單的文件存儲(chǔ)是不是都很熟悉呢?
- 多線程網(wǎng)絡(luò)的知識(shí)點(diǎn)掌握的是否扎實(shí)?https等各種網(wǎng)絡(luò)加密的知識(shí)是否夠了解?能自己搭建服務(wù)器嗎?有沒(méi)有使用Charles抓過(guò)其他app的網(wǎng)絡(luò)包進(jìn)行分析過(guò)呢?
- runtime黑魔法有過(guò)了解嗎?它的消息機(jī)制又是如何做的呢,能在開(kāi)發(fā)中做一些什么高級(jí)的事情呢?
- 程序啟動(dòng)過(guò)程,為什么能一直運(yùn)行?runloop又是怎樣的?
- 代碼的封裝性是不是足夠好呢?有沒(méi)有足夠優(yōu)雅、后續(xù)維護(hù)容易嗎?各種設(shè)計(jì)模式使用的如何?
UI部分
- 既然寫(xiě)了兩年的UI,那么能快速仿造市面上這些主流app的UI嗎?使用過(guò)Reveal去分析過(guò)微信、豆瓣、網(wǎng)易云音樂(lè)、QQ、淘寶、支付寶等應(yīng)用的UI嗎?復(fù)制一個(gè)類似的你需要多長(zhǎng)時(shí)間呢?有么有自己的一套UI框架能快速完成一個(gè)app的呢?
- UI研究稍微深一點(diǎn),比如側(cè)滑菜單這種要如何實(shí)現(xiàn),類似餓了么的兩級(jí)聯(lián)動(dòng)菜單呢?如何你要實(shí)現(xiàn)應(yīng)該要了解UIView和UIViewController,UIViewController和UINavigationController的關(guān)系了吧?我勒個(gè)草,UIView一堆方法,UIViewController一堆方法,到底都是干嘛的???你難道不好奇嗎?這塊知識(shí)點(diǎn)一直是你的盲區(qū),你能忍?我忍不了!
- UIView往深了看、下面還有CALayer,你研究過(guò)沒(méi)?為什么修改CAlayer的某些property默認(rèn)會(huì)有個(gè)動(dòng)畫(huà)產(chǎn)生呢?
- 那么Animation、UIKit Dynamics、Drawing、Graphics這些隨便拎出來(lái)一個(gè),夠你研究一陣子了吧 ?你看看比如網(wǎng)易新聞,在新聞詳情頁(yè)面上拉,回到新聞列表頁(yè)面這個(gè)動(dòng)畫(huà)做的出來(lái)嗎?你看看QQ在電話通信頁(yè)面,點(diǎn)擊右下角縮放圖標(biāo),縮放成一個(gè)頭像的這種動(dòng)畫(huà)你會(huì)做不?
還有一些大的功能點(diǎn)
- 既然用了兩年三方類庫(kù),那么比如圖片緩存之類,你看過(guò)源代碼嗎?如果你自己來(lái)實(shí)現(xiàn)的話,有哪些Caching Algorithms?該怎么取舍?各種常用的第三方類庫(kù)你研究過(guò)原理沒(méi)?
- 你的app在和服務(wù)器交流數(shù)據(jù)的過(guò)程后中安全性怎么樣?你是不是要研究一下加解密?http理解的夠清楚嗎?有沒(méi)有想過(guò)自己來(lái)寫(xiě)接口?或者更甚一些,自己來(lái)寫(xiě)一個(gè)簡(jiǎn)易的http服務(wù)器?接口部分甚至用CGI來(lái)實(shí)現(xiàn)也可以啊 !
- 要寫(xiě)服務(wù)器,那應(yīng)該要了解一下網(wǎng)絡(luò)部分吧?TCP/IP 協(xié)議得熟悉吧,然后Wireshark各種抓包得會(huì)吧?
- 網(wǎng)絡(luò)這塊順帶過(guò)來(lái)之后,即時(shí)通信類的app采用的什么技術(shù)?選xmpp還是mqtt還是自己寫(xiě)?正好可以順勢(shì)了解一下吧?
- iOS SDK里面的各種API你掌握到了什么程度?這些功能模塊排除地圖、通訊錄這種,說(shuō)些高級(jí)的比如CloudKit、Extensions、AirDrop、PassKit?覺(jué)得這些模塊在自家公司的項(xiàng)目中壓根沒(méi)有用過(guò)?可是看看你手邊的app!
其他專業(yè)化的方向
- 音視頻處理做過(guò)嗎?此類諸如豆瓣FM、喜馬拉雅、蝦米音樂(lè)、QPlayer、秒拍視頻這類的app你去研究過(guò)他們嗎?還有VoIP這類的,你掌握到什么程度了?
- 游戲開(kāi)發(fā)方向有沒(méi)有興趣?自己有沒(méi)有去研究過(guò)呢?(反正這個(gè)我是真的沒(méi)有╮(╯_╰)╭)
項(xiàng)目安全優(yōu)化等
- 項(xiàng)目中寫(xiě)單元測(cè)試嗎?UI Automation自動(dòng)化測(cè)試做的怎么樣?持續(xù)集成平臺(tái)諸如Jenkins等會(huì)用嗎?
- App的各種性能優(yōu)化、crash的統(tǒng)計(jì)分析等等你做了沒(méi)?
- App本地?cái)?shù)據(jù)存儲(chǔ)夠安全嗎?你對(duì)逆向了解多少,敏感代碼是不是做了代碼混淆呢?
知識(shí)體系要持續(xù)更新
- 官方的文檔、國(guó)外的相關(guān)書(shū)籍采用的語(yǔ)言都是Swift,難道你不準(zhǔn)備學(xué)學(xué)?除了native的,現(xiàn)在的HTML5也很火啊 ,難道你不準(zhǔn)備學(xué)學(xué)?
- 英文練習(xí)的怎么樣了,官方所有的開(kāi)發(fā)者文檔以及歷年的WWDC視頻都看完了?這么多書(shū),這么多大牛的技術(shù)博客,難道你從中一無(wú)所獲?
最后附上一張iOS知識(shí)框架圖

47d19c496c9965288fd66c0a4f4172e4_r.jpg