說來也尷尬,之前的文章全部讓我不小心清空了,以后在簡書上盡情發揮吧!整理一下以前丟失的寶藏?。?!
今天,剛把手里的項目提到預發環境測試有點空余時間就開始回顧一下想成為一名iOS架構師應該掌握的大概方向。
先談談自己對iOS架構學習成長的點點滴滴
從事iOS開發將近四年的時間,從剛開始最基本的語言、界面、邏輯,再到后面復雜點的線程、數據處理、網絡請求、動畫,最后到最復雜的底層音視頻、圖像算法、自定義各種效果、網絡底層處理,甚至是最后的性能:neon、asm優化。感覺自己在iOS的開發中,每次都是霧里看花,明明很接近真理卻總是觸摸不到,對iOS缺乏一種全局把控的感覺。所以我下定決定想看看iOS的一些官方文檔,看看iOS的各個模塊的層次結構到底是怎么回事。
大約從一年前開始做這件事件,我也知道這肯定不是一件容易的事情。就像想做Android架構師,通讀源碼一樣,肯定是很辛苦。我想無論是iOS還是Android都是嵌入式設備。既然以前是做最底層的,現在看看上層應該跨度不大,呵呵。但是真正做的時候才發現,工作量真是太大了。所以最后調整了計劃,只對iOS中的三個最難的部分做深入的研究。
三個IOS專欄:音視頻、圖像核心動畫、網絡處理
下面這是網上的一張IOS系統架構圖,畫的挺好的我就直接拿來了。呵呵
使用頻率:
紅色部分:經常使用
黃色部分:使用一般
淡綠部分:偶爾使用
綠色部分:極少使用
但我想從掌握的難易程度,以及使用這些這些技術的重要性來劃分。所以我重點關注了粉紅色方框中的內容。
iOS:Audio&Video&FFmpeg
先來看看幾個結構圖:多媒體層結構圖:
音頻處理結構圖:
越往上層,功能封裝越單一,同時可以我們自己定制的功能就越少。比如在AudioUnit我們可以控制硬件Buffer大小,可以將解碼之后的音頻數據:變聲、混頻、加密、波形展示,做各種我們想要的效果,但最上層就沒有這些豐富的API。
每個部分的詳細功能及使用會在博客中專門的介紹,這里就不啰嗦了。
另外我準備吧FFmpeg解碼也放到這個部分。初步想法是這樣的:
3.iOS原生API:
3.1 AVFoundation自定義音視頻頻播放
3.2 OpenAl播放3D音效
3.3 Audio Queue音頻隊列原理解析
3.4 AudioUnit的理解與使用
3.5 Camera 從錄制到播放流程解析
iOS 流媒體 軟編解碼及常用技術:
3.6 Mpeg-4|AAC 視頻播放器
3.7 FFmpeg 解析for iOS(可能2-4篇)
3.8 RTSP流媒體與HLS流媒體 for iOS
3.9 圖片合成視頻,音頻混頻原理分析
3.10 實時濾鏡特效處理
iOS硬編解碼:
3.11 WAV|Mp4 文件格式解析
3.12 H264 解碼基本原理及對iOS的支持
3.13 淺談iOS硬編硬解
可能還不是很全面,以后會再繼續添加。
4.Image&Animation
圖片動畫處理部分:
QuartzCore.framework : 主要包括Core Animation 核心動畫、CALayer也是這個框架下面的。
CoreGraphsic.framework:主要包括CGContext類、Quartz2d是一個繪圖引擎,由CoreGraphsic提供一組API。
OPENGLES:這個即使一個framework也是3D繪制引擎的名字。主要用于3D繪圖。以及高效的紋理貼圖。
CoreImage:里面提供了豐富的圖像處理、濾鏡庫。同時還有GPU加速功能。
這個環節我想從以下幾個部分闡述:
4.1 QuartzCore 介紹各種炫酷動畫:如PNChart圖表重構github(可能要4-5篇)
4.2 Quartz2d繪圖引擎的使用
4.3 OpenGLES 繪圖引擎的使用
4.4 IOS原生濾鏡庫介紹
4.5 armv7 內核(寄存器使用)
4.6 Neon、ASM(匯編優化)
5.NetWork
iOS的網絡層次結構主要分為以下三個部分:
Cocoa層:NSURL(比較常用的)、NSStream、GameKit、WebKit、ASIHttpRequest(第三方框架)
Core Foundation:CFNetwork/CFNetServices、CFStream、CFSocket
OS:BSD Socket
這部分如下布置:
5.1 Socket(從OS層到Cocoa層)不同情況下Socket的理解(預計4篇)
5.2 利用Socket實現Http協議(預計5篇左右)
5.3 iOS對代理、離線緩存、CDN加速的理解(預計6篇左右)