Q: 我從事 iOS 兩年了,感覺只會(huì)搭建view,用第三方庫,還有些機(jī)械代碼?真的迷茫了。想進(jìn)階,具體從什么大點(diǎn)入手呢?
A: 說實(shí)話,兩年時(shí)間只會(huì)搭建view、使用第三方類庫,真的不能稱為一個(gè)合格的iOS開發(fā)工程師!
1 先說OC部分
既然做了兩年了,對(duì)Objective-C足夠了解嗎?OC是如何基于C來進(jìn)行的封裝?解釋一下這兩行代碼啥意思?
typedef __attribute__((NSObject)) CGGradientRef GradientObject;
@property (nonatomic, strong) GradientObject storedGradient;
protocol、category這樣的東西應(yīng)該要手到擒來才是?多線程部分的知識(shí)點(diǎn)掌握是否扎實(shí)?runtime這種黑魔法研究過沒?代碼足夠優(yōu)雅、后續(xù)維護(hù)容易嗎?各種設(shè)計(jì)模式也得會(huì)吧?
2 再說UI部分
既然寫了兩年的view,那么能快速仿造市面上這些主流App的UI嗎?使用Reveal分析過微信、豆瓣、網(wǎng)易新聞、知乎、QQ、蘇寧、淘寶、支付寶的UI嗎?使用Charles去抓過他們的接口嗎?
UI研究稍微深一點(diǎn),比如側(cè)滑菜單這種要怎么實(shí)現(xiàn)?如果你要做實(shí)現(xiàn)應(yīng)該要了解UIView和UIViewController,UIViewController和UINavigationController的關(guān)系了吧?我嘞個(gè)草,UIView一堆方法,UIViewController一堆方法,到底都是干嘛的???你難道不好奇?這塊知識(shí)點(diǎn)一直是你的盲區(qū),你能忍?我忍不了!
UIView再往深了看,下面還有CALayer,你研究過沒?為什么修改CALayer的某些property默認(rèn)會(huì)有個(gè)動(dòng)畫產(chǎn)生呢?
那么Animation、UIKit、Dynamics、Drawing、Graphics這些隨便拎出來一個(gè),夠你研究一陣了吧?你看看比如網(wǎng)易新聞,在新聞詳情頁面上拉,回到新聞列表頁面的這個(gè)動(dòng)畫做的出來嗎?你看看QQ在電話通信頁面,點(diǎn)擊右下角縮放圖標(biāo),縮放成一個(gè)頭像的這種動(dòng)畫,你會(huì)做不?
3 還有這些大的功能點(diǎn)
既然用了兩年第三方類庫,那么比如圖片緩存這類,看過源碼實(shí)現(xiàn)沒?如果自己來實(shí)現(xiàn)的話,有哪些Caching Algorithms?該怎么取舍?各種常用的第三方類庫你研究過原理沒?
你的App在和服務(wù)器交流數(shù)據(jù)的過程中安全性怎么樣?你是不是要研究一下加解密?HTTP理解的夠清楚嗎?想沒想過自己來寫接口?或者更甚至一些自己來寫個(gè)簡易的HTTP服務(wù)器?接口部分甚至用CGI來實(shí)現(xiàn)也可以啊!
要寫服務(wù)器,那應(yīng)該要了解一下網(wǎng)絡(luò)部分吧?TCP/IP 協(xié)議得熟悉吧?然后Wireshark各種抓包得會(huì)吧?
網(wǎng)絡(luò)這塊順帶過來之后,即時(shí)聊天類的App采用的什么技術(shù)?選 xmpp 還是 mqtt 還是自己寫?正好可以順勢了解一下吧!
iOS SDK里面的各種API你掌握到了什么程度?這些功能模塊排除地圖、通訊錄這種,說些高級(jí)的比如CloudKit、Extensions、TextKit、AirDrop、PassKit?覺得這些模塊在自家公司的項(xiàng)目中壓根沒用過?可是看看你手邊的App!
4 其它專業(yè)化的方向
視音頻處理做過嗎?此類諸如豆瓣FM、蝦米音樂、喜馬拉雅、QPlayer這類的App你去研究過他們嗎?還有VoIP這類的,我實(shí)習(xí)的時(shí)候做過這種╮(╯_╰)╭
游戲開發(fā)方向有沒有興趣?自己有沒有去研究過呢?(反正這個(gè)我是真沒有╮(╯_╰)╭)
5 項(xiàng)目安全優(yōu)化等
項(xiàng)目中寫單元測試嗎?UI Automation 自動(dòng)化測試做的怎么樣?持續(xù)集成平臺(tái)諸如Jenkins等會(huì)用嗎?
App的各種性能優(yōu)化、Crash的統(tǒng)計(jì)分析等等你做了沒?
App本地?cái)?shù)據(jù)儲(chǔ)存夠安全嗎?你對(duì)逆向了解多少?敏感部分是否做了代碼混淆?
6 知識(shí)體系要持續(xù)更新
官方的文檔、國外的相關(guān)書籍采用的語言都是Swift,難道你不準(zhǔn)備學(xué)學(xué)?除了native的,現(xiàn)在的HTML5也很火啊,難道不準(zhǔn)備學(xué)?
英文練習(xí)的怎么樣了?官方所有的開發(fā)者文檔以及歷年的WWDC視頻看完了?這么多書,這么多大牛的博客,你難道從中一無所獲?
補(bǔ)充一個(gè)非常重要的進(jìn)階知識(shí)板塊:APP架構(gòu)設(shè)計(jì)
MVC 你就耳熟能詳了,MVVM 你不打算了解了解嗎?
-----------------上面的是別人,下面的是我的補(bǔ)充------------------------------
1)CoreData的多線程 了解沒? ?CoreData 的不同版本的數(shù)據(jù)遷移怎么做?
2)runtime 如何使用?runtime的原理,用在項(xiàng)目中.
3)runloop 的理解,項(xiàng)目中如何使用
4)js與oc 的交互會(huì)不會(huì)?
5)GCD ,NSThread ,NSOperation 能不能滔滔不絕的講出來?
6)會(huì)不會(huì)寫插件 ?
7)block 理解是否深入?
8)動(dòng)畫訂單制作是否清楚,并且用在項(xiàng)目中
9)keyChain 鑰匙串存儲(chǔ)
10)apple pay,3Dtouch 是否學(xué)習(xí)下?
11)stackView 的使用?
12)網(wǎng)絡(luò)加密,
13)推送的深入理解
14)pop 動(dòng)畫框架的學(xué)習(xí)
15)reactiveCocoa 使用
16)逆向工程,反編譯.
17)內(nèi)存管理詳細(xì)了解
18)app 瘦身技術(shù)
19)cocoapods 使用
20 )github 項(xiàng)目
21)插件制作
22 打包.a ?和framwork
我覺得寫得還好,原文在這?