站在高处看iOS开发(1) ——— 深入浅出iOS操作系统

引言

从2012年自学iOS开发以来,经常会有周围朋友、同事问我:"你是怎么从零开始,成为一个优秀的iOS开发者?"。对于“优秀”,我会觉得惭愧。在搜狐的内部交流会上,在北京的行业分享会上,当你更很多优秀的人一起探讨各种技术栈,你会发现自己其实只是偏隅一角,好似iOS研发滔滔江河中的一叶扁舟。
复盘这几年iOS开发经验,我提炼为“站在iOS系统上,以俯瞰的视角学iOS开发”,希望能给那些想转型iOS或者初级的iOS工程师提供帮助。


“登高望远天地阔,纵横捭阖自从容”,站在一个更高的高度,你可以完整的俯瞰整个iOS的运转体系。当然,很多人会问:“你这不是说的废话吗,谁都知道站得高看得远,那如何站在更高的高度?”

对于iOS开发来说,当你深入理解iOS的系统架构,你才能清晰理解手指触摸屏幕后事件的传递和响应机制;你才能明白为什么图像渲染的机制;你才能对于那些情况会造成性能瓶颈并提供优异的性能优化方案......总之,把握iOS系统全局,对于iOS开发,你会事半功倍。
这篇文章会从iOS系统开始讨论,介绍iOS系统的发展史并深挖iOS系统架构及其内核等。

iOS操作系统

了解一些操作系统的发展史以及系统架构的背景,有助于更好理解系统架构模型和设计思想。本文不过多讲解操作系统,概念性的知识会一笔带过。

1. 操作系统发展史

操作系统的历史在某种意义上来说也是计算机的历史。操作系统提供对硬件控制的调用和应用程序所必需的功能。


操作系统发展简史.png
OS X历史.png

2. 乔布斯与苹果

乔布斯与苹果的过往.png

3. iPhone产品

iPhone发布.png

4. iOS系统

iOS是苹果公司开发的移动操作系统 。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统(最初叫iPhone runs OS X)。该系统最初是设计给iPhone使用的(所以后来曾命名为iPhone OS),之后陆续套用到iPod touch、iPad以及Apple TV等产品上(所以在WWDC2010上最终宣布更名为iOS)。
\color{#0000FF}{WWDC:全球苹果开发者大会}

讲到iOS系统,我们不得不提到Mac OS,毕竟两者之间有着千丝万缕的联系。macOS,2012年前称之为Mac OS X,2012 - 2016年称OS X,2016年起称macOS,是苹果公司推出的图形用户界面操作系统。iOS,原名iPhone OS,2007年1月9日,发布iPhone OS,2010年WWDC大会宣布改名为iOS。是苹果公司为移动设备所开发的移动操作系统。无论是iOS还是macOS,都是类Unix操作系统。


Mac_OS系统架构.jpg
  • iOS系统是OS X 应对移动平台的分支,本质上iOS就是Mac OS X。拥有一样的操作系统层次结构以及相同的操作系统核心Dawin。
  • iOS 的内核闭源(苹果2017年开源了iOS的XNU内核代码),OS X内核是开源的;
  • iOS 的GUI是SpringBoard,OS X的是 Aqua。前者针对触屏,后者是鼠标驱动的窗口系统。
  • iOS app不允许访问底层的Darwin,也没有root访问权限,并且只能访问自己目录内的数据。
  • 苹果竭尽全力确保iOS作为一个移动平台操作系统的封闭性。这个特性主要是通过文件目录隔离实现的,正常的app安装在Applications/ 目录,只有有限的权限。在越狱系统中,可以将app安装在System/ 目录,以获取更多系统权限。

核心知识

重点来了,既然本文叫《站在高处看iOS开发 ——— 深入浅出iOS操作系统》,那我们就需要捋清楚深入学习iOS之前的核心知识和一些重要概念。

  • Macintosh && Mac && 麦金塔

苹果公司自1984年起以“Macintosh”开始开发的个人消费型计算机;Mac是Macintosh简称;麦金塔是Macintosh的中文翻译。

  • NeXT && NeXTSTEP

NeXT是早期乔布斯离开苹果公司后进入的公司。NeXT公司生产专用硬件,这些硬件运行专有的操作系统 —— \color{red}{NeXTSTEP}

  • NeXTSTEP虽然最终偏离了作为更优秀操作系统应该走的道路,但是在Mac OS系统中占据重要的地位。
  • NeXTSTEP采用Mach微内核系统,开发语言为Objective-C,面向对象的操作系统,并且提供了很多framework和Kit,拥有丰富的GUI开发。
  • Mac OS Classic && Mac OS X && OS X && Mac OS

Mac OS Classic是早期的苹果操作系统,拥有伟大的GUI,但系统设计却非常糟糕;
Mac OS是乔布斯回归苹果后,结合Mac OS Classic和NeXTSTEP开发的新一套苹果操作系统,在2012年的称呼为Mac OS X,2012 - 2016年之间称呼为 OS X。

Mac OS发展史.png
  • iPhone OS && iOS

iPhone是苹果手机系统的一种早期称呼方式。2010年WWDC大会宣布iPhone OS改名为iOS。

  • Darwin && XNU && Mach && BSD

    • Darwin
      核心操作系统层就是我们经常提到的Darwin,Darwin(达尔文)是苹果公司于2000年发布的一个开源操作系统,Darwin是macOS 和 iOS的一部分。可以将Darwin理解为操作系统的代号。Darwin由XNU和一些其他的Darwin库组成。
    • XNU
      XNU是由苹果公司发布的操作系统内核,即Darwin的内核是XNU,是Darwin操作系统的一部分。除macOS外,XNU还是iOS、tvOS、watchOS操作系统的内核。XNU是X is not Unix的缩写。XNU包含三部分:Mach内核、BSD、I/O Kit。
    • Mach
      XNU内核以一个被深度定制的Mach3.0内核作为基础。Mach是一个由卡内基梅隆大学开发的计算机操作系统微内核,主要是为了用于操作系统研究,特别是在分布式与并行运算上。XNU中的Mach所负责的功能非常少(核心功能),只能完成操作系统最基本的职责,比如任务调度、消息传递、进程间通信等。
    • BSD
      BSD,伯克利软件套件(Berkeley Software Distribution),也被称为伯克利Unix(Berkeley Unix),是一个操作系统的名称。XNU中的BSD部分提供了POSIX应用程序接口(BSD系统称之为API):进程模型、网络协议栈、虚拟文件系统等。
    • I/O Kit
      I/O Kit是一个设备驱动框架,为开发者提供了开发设备驱动程序的API。
      Darwin内核.png
  • 用户体验层(Application)&& 应用框架层 (Cocoa)&& 媒体层 (Media)&& 核心服务层 (Core Services)&& 核心系统层 (Core OS)

这几个概念组成了iOS的系统架构,在苹果的官方开发文档中有一幅图介绍了这几个概念的关系。我有一篇文章详解介绍了站在高处看iOS开发 ——— iOS系统架构

iOS体系结构中的Cocoa.jpg

UNIX的系统目录

OS X是一个符合UNIX标准的系统,因此也有那些标准UNIX具有的目录结构:

/bin: UNIX中的二进制程序。这是常用UNIX命令(例如ls rm mv df)所在的地方
/sbin:系统程序。这些二进制程序用于系统管理,例如文件系统管理和网络配置等。
/usr:User目录。这并不是说这个目录是给用户用的。更像是Windows中的 Program Files目录,第三方软件可以安装在这里。
/usr: 目录中包含的bin sbin 和 lib。/usr/lib用于存放共享的目标文件(类似于Window中存放DLL文件的\windows\system32目录)。这个目录还包含一个include/子目录,所有标准的C头文件都存放在此。
/etc: 其他文件。这个目录包含了大部分系统配置文件,例如密码文件(/etc/password)。在 OS X中,这个目录实际上是指向/private/etc都符合链接。
/dev:BSD设备文件。
/tmp:临时目录。在OS X中,这个目录实际上是指向/private/tmp都符号链接。
/var:各种杂项文件。这个目录中保存了日志文件,邮件存储,打印队列和其他数据。在 OS X中这个目录实际上是指向/private/var的符号链接。

iOS作为OS X的一个分支,和 OS X 非常类似的文件系统目录,但是有以下区别:

  • 没有/Users目录,只有一个/User目录,实际上是指向/var/mobile的符号链接。
  • /Developer目录只有在iOS设备被Xcode选中为“Use for development”时才会出现。在这种情况下,iOS SDK中的 DeveloperDiskImage.dmg 镜像会在设备上挂载。

参考书籍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容