1、今天我鼓起了勇气,想纪录自己对IOS架构学习成长的点点滴滴。

从事IOS开发也有几年的时间,从刚開始最主要的语言、界面、逻辑,再到后面复杂点的线程、数据处理、网络请求、动画,最后到最复杂的底层音视频、图像算法、自己定义各种效果、网络底层处理。甚至是最后的性能:neon、asm优化。

感觉自己在IOS的开发中,每次都是雾里看花,明明非常接近真理却总是触摸不到。对IOS缺乏一种全局把控的感觉。所以我下定决定想看看IOS的一些官方文档,看看IOS的各个模块的层次结构究竟是怎么回事。

大约从一年前開始做这件事件,我也知道这肯定不是一件easy的事情。就像想做Android架构师,通读源代码一样,肯定是非常辛苦。由于读研的时候做的事DSP信号处理方面的(底层驱动。算法移植)。

所以我在開始之前给自己打了非常多气。我想不管是IOS还是Android都是嵌入式设备。既然曾经是做最底层的,如今看看上层应该跨度不大,呵呵。

可是真正做的时候才发现。工作量真是太大了。所以最后调整了计划,仅仅对IOS中的三个最难的部分做深入的研究。

当然由于时间仓促。加之自己水平有限,有认识不清或者不到位的地方,还希望大家批评指正!

请勿拍砖哈呵呵!

2、三个IOS专栏:音视频、图像核心动画、网络处理

这三个的重要性我就不说了,一般的clientAPP可能没有深入关注这点。但仅仅要想做一些有特点、做深入、做精致。我想这三个部分是不得不常常接触的。

以下这是网上的一张IOS系统架构图,画的挺好的我就直接拿来了。呵呵

使用频率:

红色部分:常常使用

黄色部分:使用一般

淡绿部分:偶尔使用

绿色部分:极少使用

但我想从掌握的难易程度。以及使用这些这些技术的重要性来划分。

所以我重点关注了粉红色方框中的内容。

3 IOS:Audio&Video&FFmpeg

先来看看几个结构图:多媒体层结构图:

音频处理结构图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="564" height="223" alt="">

越往上层,功能封装越单一,同一时候能够我们自己定制的功能就越少。

比方在AudioUnit我们能够控制硬件Buffer大小,能够将解码之后的音频数据:变声、混频、加密、波形展示,做各种我们想要的效果,但最上层就没有这些丰富的API。

每一个部分的具体功能及使用会在博客中专门的介绍,这里就不啰嗦了。

另外我准备吧FFmpeg解码也放到这个部分。初步想法是这种:

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

图片动画处理部分:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="590" height="431" alt="">

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篇左右)

IOS架构师之路:我对IOS架构的点点认识(大纲)的更多相关文章

  1. 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  2. paip.java 架构师之路以及java高级技术

    paip.java 架构师之路以及java高级技术 1.    Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...

  3. Java架构师之路:JAVA程序员必看的15本书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  4. android大牛高焕堂最新力作-android架构师之路

    android大牛高焕堂 个人介绍: Android专家顾问,台湾Android论坛主席,现任亚太地区Android技术大会主席,台湾Android领域框架开发联盟总架构师.发表100多篇Androi ...

  5. 高焕堂《android从程序员到架构师之路》 YY讲坛直面大师学习架构设计

    <android从程序员到架构师之路>YY讲坛活动:  sundy携手高焕堂老师全程YY答疑 与大师一起,分享android技术 时间:7月21日下午2:00   报名联系QQ:22243 ...

  6. 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET

    基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...

  7. 架构师之路-在Dubbo中开发REST风格的远程调用

    架构师之路:从无到有搭建中小型互联网公司后台服务架构与运维架构 http://www.roncoo.com/course/view/ae1dbb70496349d3a8899b6c68f7d10b 概 ...

  8. 单KEY业务,数据库水平切分架构实践 | 架构师之路

    https://mp.weixin.qq.com/s/8aI9jS0SXJl5NdcM3TPYuQ 单KEY业务,数据库水平切分架构实践 | 架构师之路 原创: 58沈剑 架构师之路 2017-06- ...

  9. 【架构师之路】集群/分布式环境下5种session处理策略

    [架构师之路]集群/分布式环境下5种session处理策略   转自:http://www.cnblogs.com/jhli/p/6557929.html 在搭建完集群环境后,不得不考虑的一个问题就是 ...

  10. java架构师之路:推荐的15本书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

随机推荐

  1. JavaWeb——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  2. 关于《平安iOS面试》小结

    面了下平安好医生iOS职位,结果不是很理想,也就是GG.写此文的目的在于,时刻提醒自己应该学到老,不要安于现状.也给那些以后去面试的coder一些"剧透"! 一.第一轮 妹子 面试 ...

  3. Java学习笔记50:JSONObject与JSONArray的使用

    Java不像PHP解析和生产JSON总是一个比较痛苦的过程.但是使用JSONObject和JSONArray会让整个过程相对舒服一些. 需要依赖的包:commons-lang.jar commons- ...

  4. LR性能测试应用

    上半个月,由于工作和上课两边跑,几乎没有属于自己的时间去做自己想做的事,在没有加班的一天晚上,我突然冲动地跑到图书馆借了一本书<LR性能测试应用>——姜艳. 我总喜欢看那些陈旧的书,因为在 ...

  5. if分支的四种形式

    分支:——四种if一.if(条件表达式){} 二.if(条件表达式){}else{} 三.if(条件表达式){}else if(条件表达式){}else if(条件表达式){}....else{} 四 ...

  6. window服务创建

    第一步:创建服务 第二步:在Service1.cs视图中 右键 选择”添加安装程序” 这里要注意几个细节 设置上面的属性 这两个分别有属性,具体网上查使用方式 3 实例代码编写 主要下面几个方法 pr ...

  7. 「前端开发者」如何把握住「微信小程序」这波红利?

    由于前两周一直在老家处理重要事情,虽然朋友圈被「微信小程序」刷爆了,但并没有时间深入了解. 昨天回广州之后,第一件事情就是把「微信小程序」相关的文章.开发文档.设计规范全部看了一遍,基本上明白了「微信 ...

  8. C#调用SAPWebService

    其实和调用其它WebService 没有很大不同  只是不了解SAP的人 可能不太明白 SAP接口中的相关参数 //调用接口 , 创建对象 ServiceReference1.Z_IF_MM_VEND ...

  9. C++ primer学习记录(个人猜想未测试版本)

    学习版本:第五版. 本博文主要记录个人曾经并不知晓知识细节. 因为linux下的编译环境还未进行学习.所以实际代码测试将在今后完成. 红色:需确认. 蓝色:重点. 1)const对象设定为仅在文件内有 ...

  10. VirtualBox添加共享文件夹

    直接上图 添加了一个名为"Ubuntu10.04-en"的共享文件夹 但是按照它说的命令 mount -t vboxsf share mount_point 打入,然后悲剧了 错误 ...