说来也尴尬,之前的文章全部让我不小心清空了,以后在简书上尽情发挥吧!整理一下以前丢失的宝藏!!!
今天,刚把手里的项目提到预发环境测试有点空余时间就开始回顾一下想成为一名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篇左右)