前言
這里筑夢師,是一名正在努力學習的iOS開發(fā)工程師,目前致力于全棧方向的學習,希望可以和大家一起交流技術,共同進步,用簡書記錄下自己的學習歷程.
本文閱讀建議
1.一定要辯證的看待本文.
2.本文僅代表個人片面觀點,如有不同觀點,還往及時指出.
3.本文只闡述學習路線和學習當中的重點問題.需要讀者自己使用百度進行拓展學習.
4.本文所表達觀點并不是最終觀點,還會更新,因為本人還在學習過程中,有什么遺漏或錯誤還望各位指出.
5.覺得哪里不妥請在評論留下建議~
6.覺得還行的話就點個小心心鼓勵下我吧~
目錄
1.蘋果官方文檔 & 新API
2.iOS第三方庫源碼 & 實現(xiàn)原理
3.iOS標配技能
4.iOS多線程
5.iOS架構 & 代碼規(guī)范
6.iOS工程化管理
7.蘋果官方Kit
8.Runtime & Runloop
9.iOS FFmpeg & Opencv原理
10.iOS底層原理
11.iOS App逆向
12.iOS Swift
13.本文沒有提到的知識點
14.明確自己的定位和路線
推薦書籍 & 網(wǎng)站推薦
Head First iPhone/iPad開發(fā)
iOS應用安全權威指南
高性能iOS應用開發(fā)
高級核心動畫技巧
2017螞蟻金服AR框架
京東應用架構設計
王巍-Swift4.0
SwifterTips (第四版)
OS X與IOS內核編程
OpenGL著色語言
avfoundation秘籍
CFNetwork-編程指南
通過實現(xiàn)TableView來理解IOS編程
七牛云直播技術分享
閱讀前須知
之前那篇iOS開發(fā)路線是去年9月份做好的,刪除了底層部分和逆向部分,因為本人尚在學習之中,不方便對未知領域做片面總結,包括本文,其目的是為了向大家分享,如果是我在進行iOS進階過程中會去學習的知識點.
本文單獨針對iOS開發(fā)水平提升方面,有技術方面的遺漏還望各位積極回復.
多的不說,只說兩點:
1.確實覺得自己水平實力低于平均水平,明顯想提升自己實力的.
2.如果有"這些技能工作當中用不到,學來干嘛?"這種想法,并不適合閱讀本文.
既然大家都是想提升實力,就不要老去思考工作當中用不用的到,每個人職能就那么點,為什么會分水平高低,還不是因為人家懂得多?心里沒數(shù)?別心浮氣躁的,踏踏實實的提高硬實力.
iOS基礎
本文主要是為了補充iOS開發(fā)學習路線那篇文章,所以到達這一步,就暫定你已經(jīng)會基本的操作,以及獨立開發(fā)過項目了.
蘋果官方文檔 & 新API
蘋果開發(fā)者官網(wǎng)有對每個API的解釋,使用,介紹.
使用百度"iOS開發(fā)"+ 空格 +"各個知識點" 來搜索學習各種自己不擅長的知識.例如:iOS開發(fā) Runtime原理.
iOS第三方庫源碼 & 實現(xiàn)原理
我們平常經(jīng)常使用第三方庫,例如:AFNetworking,MJRefresh,YYKit,SDWebimage,SDAutoLayout,Masonry.
那么你是否去查看其第三方庫是如何封裝的?
AFNetworking是如何實現(xiàn)異步訪問網(wǎng)絡請求,如何處理你傳給他的數(shù)據(jù)字典,在AFN內部進行了幾層封裝?
MJRefresh的實現(xiàn)原理是什么?
SDWebImage的緩存原理?
YYKit針對于FPS是如何優(yōu)化的?
SDAutoLayout和Masonry的布局庫原理有著怎么樣的區(qū)別,其原理是依據(jù)什么進行布局的?誰的效率更高一點.
還有很多的第三方庫值得我們去學習.
iOS標配技能
交流
首先,在公司日常的交流,要穩(wěn)重不失禮節(jié),出問題的時候,要針對問題提出解決方案,而不要帶情緒.
當有新的業(yè)務需求提出時,根據(jù)自己的實力,給出不同的業(yè)務方案.
購物車
購物車可以說是在各個客戶端,最經(jīng)典的案例了,這是一個業(yè)務需求,也是涉及到增刪改查,異步處理等各種業(yè)務邏輯混雜于一身的業(yè)務需求.
一個健壯的購物車,可以說是必備的業(yè)務技能.和登錄注冊同理.
支付
有了購物車,就一定會有支付,熟悉支付寶,微信,銀聯(lián),蘋果支付IAP等各種支付平臺的接入,接入流程.
你可以沒做過,但你不能不知道,就比如支付寶當中的加密算法RSA是屬于什么加密.他是如何驗證的.公鑰和私鑰是如何在APP和服務端存儲驗證的?
藍牙
藍牙這個就不細說了,很簡單,自己寫個DEMO,不要覺得自己沒做過就很難,寫一個連接Demo,沒那么難.
實際藍牙項目中,你可以根據(jù)業(yè)務需求,選擇較為健壯,易接入的藍牙設備.最好可以提供接入手冊的那種,接入其實很簡單,調試費勁罷了.
攝像頭
同理藍牙,攝像頭需要選擇提供成型SDK的廠家,除非你公司實力非常強大,肯購買提供底層庫讓你自己做SDK的攝像頭.愿意投入時間成本去開發(fā)SDK.
3DTouch
寫一個Demo練習一下,很簡單,必備技能,但一般不是每個應用都做.
直播
直播現(xiàn)在中小型公司普遍采用第三方直播平臺,不管你是否做過,你可以先去 騰訊云,七牛云,阿里云 開發(fā)平臺進行學習,技術文檔是開放的.
你哪怕知識看一遍,也比不看的要強的多.可以接入Demo測試學習一下.
當然,有些公司不想接入第三方,也有開源的框架可以自己做直播平臺,這就需要三端連調,一同處理需求了.
RTMP推流
例如IJKPlayer FFmpeg,包括直播原理,你要懂.
直播的視頻是遵循什么協(xié)議一個個將視頻包分發(fā)到客戶端,RTMP協(xié)議的優(yōu)缺點等.
視頻處理
視頻處理,例如轉碼啊,旋轉,編碼.
不同格式的處理,視頻大小的處理,為什么QQ和微信的小視頻可以做到超級壓縮?
如何對視頻進行濾鏡處理,類似抖音那樣.
圖片渲染&濾鏡
GPUIImage是一個集濾鏡,圖像處理的框架,可以學習一下,如何添加濾鏡,處理圖片.
Socket & XMPP
即時聊天,也是當下流行的技術,每個APP幾乎都少不了要有一個聊天功能,即使沒有,也會涉及到客服,反饋等功能.
那么即時聊天遵循什么協(xié)議,用什么來做的呢?可以了解一下iOS當中如何用Socket 實現(xiàn)簡易聊天,或者使用XMPP協(xié)議實現(xiàn)聊天?
RN開發(fā) & JavaScript
React Native開發(fā),由Facebook開源,React Native使你能夠在Javascript和React的基礎上獲得完全一致的開發(fā)體驗,構建世界一流的原生APP。
這是一門新技術,本人沒接觸過,所以不贅述,大家自己了解一下,一些公司會用這個開發(fā)App.
Git & SVN 項目版本控制
公司當中一般都有后端開發(fā)工程師 或者DBA創(chuàng)建一個屬于本公司局域網(wǎng)的Git本地管理倉庫.
如果你是單人開發(fā)iOS,那就需要掌握最基本的版本控制,
如果你在公司是團隊開發(fā),還要掌握沖突處理的技能
優(yōu)雅的開發(fā)
[如何優(yōu)雅的使用Mac進行開發(fā)]稍后更新
iOS多線程
GCD、NSOperation、NSThread各種靈活運用和嵌套
iOS架構 & 代碼規(guī)范
iOS應用架構談-By.Casa大
可以仔細學習這篇文章,養(yǎng)成良好的代碼規(guī)范.
蘋果官方Kit
- ARKit.
- SiriKit
- HealthKit
- HomeKit
- SearchKit
- IOKit
- PDFKit
- CloudKit
- GameplayKit
- SpriteKit
- SceneKit
- MusicKit
- ResearchKit
- MapKit
- StoreKit
- AVKit
可以嘗試了解一下上面的各種kit官方API,因為有可能新的業(yè)務需求就是官方API調用的事就解決了.
Runtime & Runloop
Runtime和Runloop的原理和機制,以及如何使用,大家可以深入了解一下,因為個人水平原因,目前只有整理好的筆記,暫時不方便對此進行總結.
iOS FFmpeg & Opencv原理
FFmpeg和Opencv底層原理是什么,是什么支撐了這個強大的視頻處理庫.
iOS底層原理
結合Runtime機制深入了解Objective-C對象的本質和消息機制,其方法和對象在編譯和運行過程中分別是什么狀態(tài).
iOS App逆向
App逆向目前本人也沒有深入理解,不知道在工作當中如何應用,確實讓我了解到iOS開發(fā)項目中之外的東西.
例如,客戶端和服務器概念,SSH登錄,以及各大有名的APP是如何架構的(推理一下).
iOS Swift
Swift目前已經(jīng)4.0了,個人感覺本人會在Swift5.0進行學習吧,雖然很多項目沒有用到Swift,但Swift確實是一個趨勢,可以了解一下.
本文沒有提到的知識點
- 崩潰日志分析
- 移動端加解密
- 數(shù)據(jù)結構 & 算法導論
- 混合開發(fā)
- 機器學習
- ARKit
- RAC
- iOS 工程化
- 模塊化開發(fā)
- 組件化開發(fā)
- 單元測試
- 技術經(jīng)理
- 產(chǎn)品經(jīng)理
- 架構師
- 阿里技術前沿
- 跟隨巨人的腳步
iOS進階概念 By.SindriLin
本人尚在學習階段,但我一直想傳達一個積極向上的想法,以及個人的學習思路.因為水平欠缺,在發(fā)表文章之余,我結識了SindriLin前輩,與前輩交流了本人的想法.
前輩告訴我,進階不能僅僅局限于iOS開發(fā),而是要從工程的角度來看待開發(fā)工程師進階這個說法.
代碼設計能力
代碼設計能力主要體現(xiàn)在如何設計代碼,設計模式的核心在于六大原則,而不是具體的某些設計模式。
工具設計能力
工具設計能力在于使用工具的過程中,了解工具的實現(xiàn),嘗試去設計更適合工程的工具,這部分需要大量的代碼積累。另一方面由于工具是可復用的,對代碼設計能力的要求是有的,所以屬于更高.
工程規(guī)劃能力
- 抗風險
- 成本
- 回報
總結
確實,作為一個開發(fā)工程師,應該去縱觀整個工程,而不是僅僅局限于自己的工作棧,否則不可能獲得質的提升.
總之,希望大家制定自己的路線進行努力,只要不原地踏步.
明確自己的定位和路線
和同事阿振有一天聊起了開發(fā)水平如何分辨,初中高級開發(fā)工程師的區(qū)別大致就是:使用第三方庫,改第三方庫,創(chuàng)造第三方庫.
推薦看一下阿里分享的技術圖冊,你就會發(fā)現(xiàn),阿里研究的技術正在世界的前沿,學無止境.
努力吧,美好的生活在向你招手~
結束語
如果您對這篇文章有什么意見或者建議,請評論與我討論.
如果您覺得還不錯的話~可以點個喜歡鼓勵我哦.
如果您想和我一起學習,請毫不吝嗇的私信我吧~
介個是我的個人博客,歡迎參觀哦~