1. 程式人生 > >淺談iOS程式設計師的成長與進階

淺談iOS程式設計師的成長與進階

iOS高階工程師是如何進階的

說實話這個話題說的有點大了,其實我有時候也是非常的迷茫的,工作忙的時候還能跟著工作的節奏走,閒下來時間一長就有點迷茫,不知做什麼。這當然是非常恐怖的了,所以現在在迷茫過、在不知所措過之後,想想還是應該寫寫文章屢屢思路再上路,希望自己能養成好的習慣堅持下去。

首先工作過兩年的工程師,只會搭建View、使用第三方類庫,真的不能稱作一個合格的iOS開發工程師,下面我從幾個方面來說一下需要有什麼樣的提高

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知識框架圖

這裡寫圖片描述