开篇词 | IOS开发锚定一个点,然后在这个点上深耕

你好,我是戴铭,欢迎你加入我的 iOS 开发专栏。

说起 iOS 开发,自然是绕不开 iPhone 和 App Store 这两个词。多少年过去了,我依然记得 2007 年乔布斯发布第一代 iPhone 时的场景,可以说,那款 iPhone 重新定义了很多人对于手机的认知。那一天,也是移动互联网时代的开端。紧接着,在 2008 年 7 月的 WWDC 苹果全球开发者大会上,苹果宣布 App Store 正式对外开放,这也意味着属于开发者的移动互联网时代真正开始了。

一转眼,十多年过去了,移动开发早已飞入寻常百姓家,移动 App 基本成为了大众互联网产品的标配。从技术角度看,这些年来移动开发领域相继诞生了组件化、热修复、动态化、大前端、Flutter、小程序等热门技术,给人一种“乱花渐欲迷人眼”的感觉,它们争先恐后地成为行业焦点,然后又在不知不觉中被后来者替代,最后再逐步淡出开发者的视野。

在我看来,这些技术看似过眼云烟,实则是递进式推动着移动技术的演进。

这些技术看似“纷繁杂乱”,实则是殊途同归,它们背后都是一些通用的底层技术和创新的设计思想。比如,热修复、动态化和大前端的底层技术,都是 JavaScriptCore 这样的 JavaScript 虚拟机技术;再比如,大前端和 Flutter 的渲染,使用的都是 WebCore 中 Skia 这样的渲染引擎。

所以,每当我串起来整体看移动开发领域这些年的这些“新”技术时,总是会感慨说“万变不离其宗”。我就觉得如果我们能深入进去把某一门技术研究透彻,那再拿下其他的技术时就会变得轻车熟路。

**以组件化为例,**它是顺应着 App 从单一业务到多业务汇聚的演进而出现的一门技术。比如微信刚发布时业务单一,就只有聊天的功能,后来又加上了支付、朋友圈、游戏,再等到小程序功能上线后更是打车、电影票、购物等只要你能想到的需求它都有,俨然成为了一个超级平台。

从本质上讲,组件化是将上层业务隔离开,下层提供通用能力的一种架构模式,这样上层业务团队可以分开从而减少团队沟通成本,下层能力的通用性又反过来提高了各个业务团队的开发效率。为了达到不同业务隔离的结果,解耦手段不断被引入到 iOS 开发中,比如使用协议或者中间者模式在运行时统调等方式。

听到这里,你还会觉得组件化技术陌生吗?并不陌生,它的核心思想就是解耦。只要你把这块研究透彻了,那再理解与解耦相关的其他技术架构也就水到渠成了。

我们再以热修复为例,如果你看过相关的热修复技术源代码或者架构图的话,应该不难发现热修复技术的核心引擎主要就是 JavaScriptCore,它要求原生开发者使用 JavaScript 来编写代码。而为了方便原生开发者,热修复引擎最大卖点就是将原生 Objective-C 代码转成 JavaScript 代码然后让 JavaScriptCore 去解释。这样一个代码转换过程其实就是通过编译技术来实现的。

同时,在目前正流行的这波大前端和小程序浪潮中,各种大前端技术都对 Web 标准做了大量限制,定义了自己的规范模板。这些自定义的模板最终都会使用 Babel 这样的前端编译技术将其编译成 JavaScript 代码,然后再交给 JavaScriptCore 解释调用原生渲染。

所以,你看,只要掌握了热修复中的核心技术,就不难理解小程序的实现原理。一切看起来就是那么自然。

最近圈子里又开始流行 Flutter 了,在 Flutter 这波浪潮还没有全面落地铺开前,很多人就开始关心:下一个热点会是什么?其实我觉得大可不必在乎,你只要静下心来好好消化掉这几年浪潮留下的关键技术,在这个基础上再去理解各种“新技术”,必然会驾轻就熟。

最后,再说个你最能切身体会的企业招聘对于 iOS 开发者的要求。以前对工作经历只要求有过完整独立完成的 App 上架就够了,而现在如果你缺少大型项目经验,团队规模小,没有好的提质提效开发经验,在应聘时的竞争力会大打折扣。

但,这并不是 iOS 领域的个体问题,任何一个领域其实都和移动领域一样,从小型到大型,从个人到团队,从低效到高效,从凑合够用到高要求。

比如说,后端开发领域伴随着互联网的发展,也有过同样的经历。你会发现,在一些公司从后端晋升到更高级别的开发者会更多些。这就是因为后端开发领域很早就从小规模开发转变成了大规模开发,在这个过程中已经整体经过了大量的演进,对于开发人员的要求也在逐步提高,特别是对系统架构的稳定和灵活设计能力的要求,还有对工程质量和规范效率方面的高要求。

我有幸深度经历了移动技术和后端技术的演进过程,并在工作中进行了深度的调研和研究,最终将成果落地到各个项目中。在 iOS 技术发展的过程中,我的知识也得到了递进式提升,也最终被运用到了实际工作中,比如组件化方案落地、大前端建设、应用开发阶段效率的提升、上线后各种难点问题的解决等。

我热爱分享,喜欢将平时学习和工作中的经验分享到我的博客和微博上,也会将一些技术总结通过代码发到 我的 GitHub上。

在这个专栏里,我会针对移动开发这些年演进过程中沉淀下来的那些技术,那些支撑着 iOS 迈向更稳健、更成熟的技术进行详细而系统的输出。同时,我也会提出自己的一些思考,包括对于各种技术后面发展的方向和可能性的想法。

接下来,我跟你说下专栏大致内容构成和写作思路。

移动开发面对的也是计算设备,和后端一样也要监控和解决设备的内存和线程等性能问题,编程的本质就是要解决问题,无论是需求、开发、调试、线上问题都需要编程来解决,而代码是开发者的唯一武器。

所以,在第一部分的基础篇,我会围绕着如何解决 iOS 开发各个阶段的问题展开。这是编程的基础,没有这个基础其他都免谈。同时,解决问题的扎实程度,也决定了你在面试中的竞争力。

iOS 开发者更多的是面向用户界面和交互的开发,而在界面、交互以及数据通信处理过程中存在大量的重复工作,因此我会在第二部分的应用开发篇里,给你推荐一些经典好用的第三方库。

用好这些库,能够帮助你大幅提高应用开发的效率。同时,我也会带你去探究这些优秀库的背后原理和实现思路,当你面对千奇百怪的需求时,也能够开发出适合特定需求的库。说不定下一个经典的第三方库就是由你开发的呢?

如果你希望自己能在技术能力和职级上得到晋升,在碰到问题时不再被动地见招拆招,而是按照自己的套路主动出击化险为夷,那么对于底层原理的深入学习就非常必要了。在这个过程中,你还能学到前辈解决问题的思路,这将让你收获颇丰。

所以,在第三部分的原理篇,我会专门针对一些底层原理,比如 XNU、内存管理、编译等进行分享,期待能够激发起你的学习兴趣,让你内力大增。

所谓良药苦口,底层知识的最初学习过程一定是辛苦的,只有目标和意志非常坚定的那群人才能坚持下来。但是,当你利用这些知识造出更好的轮子时,那种成就感是你在舒适区获得的愉悦感无法比拟的。

iOS 开发技术的演进和前端是齐头并进的,前端从开始的 H5 Hybrid 容器“陪跑姿态”转变为以 React Native 这样的技术为支撑的“助跑角色”,还有 Flutter 这种新原生技术期待能够主导 iOS 的开发,最后小程序这种产品形态主打生态牌,而技术上返璞归真采用 Hybrid 技术又将前端技术重新拉回舞台。

面对现在这种原生与前端共舞的情景,我会在第四部分帮你拆解各种技术细节,以及它们之间的内在联系,以便帮助你站在更高的视角去判断未来的技术走向和趋势。晋升到更高位置的你,对未来技术走向的判断将尤为重要。

最后,我希望你能认真动手完成每篇文章后面的课后作业。

对于咱们手艺人来说,不动手都是空谈,就像绘画教程,光看不练,是不会有进步的。这就如同九阴真经的口诀,铭记于心后还需要常年累月的修炼才能精进。动手就会碰到问题,就会思考,这个主动过程会加深你的记忆,这样后面再碰到问题时,你会更容易将相关知识串联起来,形成创新式的思考。

好了,今天的内容就到这里,如果可以的话,还请你在留言区中做个自我介绍,和我聊聊你目前的工作、学习情况,以及你在学习 iOS 开发时的痛点,这样我们可以彼此了解,也方便我在后面针对性地给你讲解。

加油,让我们一起静下心,沉到具体的技术里,潜心研究。

01 | 建立你自己的iOS开发知识体系

你好,我是戴铭。

这是我们专栏的第一篇文章。所谓知己知彼,今天我们先来聊聊 iOS 开发需要掌握哪些知识,以及如何把这些知识融会贯通,进而形成一套成熟的知识体系。

我们现在所处的互联网时代,学习资料真的是非常完备。比如,GitHub 上各领域的 Awesome 系列,就是专门用来搜集各类资料的,其中 iOS 的 Awesome 里面,就涉及了 iOS 开发的各个方面。

但知识掌握的牢固、精细程度,是根据学习资料收集的多少来衡量的吗?当然不是了。

相比于以前的资料匮乏,现在的情况往往是大多数人手里资料一大堆,但真正消化吸收的却是少之又少,用到相关知识时总有种“书到用时方恨少”的无奈。毕竟,人的精力是有限的,根本无法完全掌握这些被轻松收集来的资料。

再看看我们身边那些“厉害”角色,他们并不是样样精通,而是有擅长的领域。从我接触的这些“大神”们的成长经历来看,都是先深挖某一领域,经过大量的学习和实践后理解了编程的本质,从而可以灵活调配和运用自己已经积累的知识。在这之后,他们再探索其他领域时,就做到了既快又深,成了我们眼中的“大神”。

所以,学习 iOS 开发这件事儿,不要一开始就求多,而要求精、求深。因为,条条大路通罗马,计算机的细分领域虽然多,但学到底层都是一样的。

就比如说,很多 iOS 开发者,刚学会通过网络请求个数据、摆摆界面弄出 App 后,看到人工智能火了就去学一下,区块链火了又去学一下,前端火了又开始蠢蠢欲动。但结果呢?每一门技术都学不深不说,学起来还都非常费劲。

因此,我的建议是不要被新技术牵着鼻子走,而是努力提升自己的内功,这样才能得心应手地应对层出不穷的各种新技术。

接下来再回到专栏上,我希望这个专栏能够结合自己的成长经历,与你分享核心且重要的 iOS 开发知识。这些知识,不仅有助于你平时的开发工作,能够提高你开发 App 的质量和效率,还能够引导你将各类知识贯穿起来,进而形成一套自己的核心且有深度的知识体系。

形成了这套知识体系后,当你再学习新知识时,就会更加快速和容易,达到所谓的融会贯通。

举个例子,iOS 动态化和静态分析技术里有大量与编译相关的知识。编译作为计算机学科的基础知识,除了 iOS 开发,在跨端技术 Weex、React Native,甚至前端领域(比如 Babel)都被广泛使用。

但是,这些知识的学习也要有所取舍,毕竟精力有限,而且我们也确实需要一些“立竿见影”的效果来激励自己。那么,**我们应该先学习哪些知识,才能快速提高日后学习和工作的效率呢?**接下来,我就和你分享一下我脑海中的 iOS 知识体系,帮你梳理出要重点掌握的核心知识脉络。

iOS 的知识体系,包括了基础、原理、应用开发、原生与前端四大模块。我认为好的知识体系首先需要能起到指导 iOS 应用的开发和发现并解决开发问题的作用。所以,这四大模块的设置初衷是:

  • 基础模块的作用,就是让你具有基本的发现并解决开发问题的能力;
  • 应用开发模块,就是用来指导应用开发的;
  • 好的知识体系还要能够应对未来变革,也就是需要打好底子掌握原理、理清规律,看清方向。所以,原理模块的作用就是帮你掌握原理和理清规律,而原生与前端模块会助你看清方向。

接下来,我就为你一一细说这四个模块。

基础模块

我把 iOS 开发者需要掌握的整个基础知识,按照 App 的开发流程(开发、调试测试、发布、上线)进行了划分,如下图所示。

我们在开发阶段需要掌握的基础知识,主要包括:启动流程、页面布局和架构设计。

  • 启动的快慢,可谓 App 的门面,同时关乎日常的使用体验,其重要性不言而喻。而只有了解了 App 的启动流程,才能合理安排启动阶段对功能初始化的节奏,将启动速度优化到极致。在专栏的基础篇,我会和你一起剖析 App 启动时都做了哪些事儿,让你可以掌控 App 的启动。
  • 界面是开发 App 的必经之路,是一定绕不开的,如何提高界面开发的质量和效率,一直是各大团队研究的重要课题。那么,我在专栏中和你介绍、分析的目前界面开发的趋势,就可以帮你夯实界面这块内容的基础。
  • 架构怎么设计才是合理的,也是这个阶段需要探索的一个重要课题。毕竟每个团队的情况不一样,什么样的架构能够适应团队的长期发展,就是我在这个专栏里要和你好好说道说道的。

调试测试阶段,我们需要掌握的主要就是提速调试和静态分析的内容。

  • iOS 开发的代码都是需要编译的。那么,程序体量大了后,编译调试过程必然会变长。而有啥法子能够将这个过程的速度提高到极限,就是我要在这个专栏里面和你分享的了。
  • 对 App 质量的检查,分为人工检查和自动检查。而质量检查的自动化肯定是趋势,所以自动化静态分析代码也是这个专栏会讲的。

发布阶段,我们需要做些和业务需求开发无关、涉及基础建设的事情。这部分工作中,最主要的就是无侵入埋点和包大小优化。

  • iOS 安装包过大会导致 4G 环境下无法下载的情况,所以对包大小的控制已经成为各大公司最头疼的事情之一。希望我在包大小瘦身上的经验能够帮到你。
  • 发布前需要加上各种埋点,这样才能让你充分地掌握 App 运行状态是否健康,同时埋点也是分析上线后遇到的各种问题的重要手段。但是,如果埋点的代码写的到处都是,修改和维护时就会举步维艰。所以我在这个专栏里,也会和你分享一些好的将埋点和业务代码解耦的无侵入埋点方案。

上线阶段,开发质量的高低会影响上线后问题的数量和严重程度,比如有崩溃和卡顿这样导致 App 不可用的问题,也有性能和电量这样影响用户体验的问题。对于这些问题你一定不会袖手旁观,那怎么才能监控到这些问题呢?怎样才能够更准确、更全面地发现问题,同时能够收集到更多有助于分析问题的有效信息呢?

在这个专栏中,我会从崩溃、卡顿、内存、日志、性能、线程、电量等方面和你一一细说。

应用开发

应用开发部分,我们需要关注的就是一些经典库,因为这些经典库往往出自技术大拿之手,代码结构和设计思想都非常优秀,同时经过了大规模的实践,不断打磨完善,具有很高的质量保障。比如:动画库 Pop,响应式框架 RAC、RxSwift,JSON 处理库 JSONModel、Mantle 等。

在专栏里,我会和你好好介绍下布局框架新贵 Cartography 和富文本霸王 YYText 、DTCoreText ,分享我的使用经验,让你也能够快速上手并应用到你的 App 中。

应用开发中和视觉表现相关的 GUI 框架、动画、布局框架、富文本等部分知识掌握好了,直接能够让用户感知到你 App 的优秀表现。响应式框架、TDD/BDD、编码规范等知识能够让你的开发更规范化、更有效率。我会从实践应用和实现原理的方面,带你全方位地去了解如何更好地进行应用开发。

有道是选择大于努力,可能你使用一个不恰当的库所做的大量努力,也不及别人用对了一个好的库轻轻松松、高质量完成的任务。

原理模块

说到 iOS 开发原理,主要就是系统内核 XNU、AOP、内存管理和编译的知识。这些知识具有很强的通用性,其他任何语言、系统和领域都会涉及到。

在接下来的专栏里,我会为你剖析这些知识,希望能够帮助你更好地理解它们的原理。掌握这些通用知识,可以提升你的内功,助你打通任督二脉;深挖知识,可以帮你理清楚开发知识的规律,达到融会贯通的效果;掌握通用知识,也能够让你对未来技术见招拆招。所以,你花在这部分知识上时间,绝对是超值的。

原生与前端

随着 Flutter 和 React Native 越来越完善,关注的人也越来越多。原生还是前端,才是移动应用的未来,谁都没法说得清楚。有句话怎么说来着,无法选择时就都选择。

在原生与前端这个部分,我会着重和你分析隐藏在这些时髦技术背后的解释器和渲染技术,也正是这些技术的演进造就了目前跨端方案的繁荣。

值得一说的是,从 H5 到 Flutter,渲染底层图形库都使用的是 Skia。也就是说,这么多年来渲染底层技术就基本没有变过。而且,向 Flutter 的演进也只是去掉了 H5 对低版本标准的支持。但,仅仅是去掉这些兼容代码,就使性能提升了数倍。

所以说,对于新的技术如何去看,很重要,先不要急着深入到开发细节中了,那样你会迷失在技术海洋中。你需要先建立好自己的知识体系,打好基础,努力提升自己的内功,然后找好指明灯,这样才能追着目标航行。

最后,我来把整个专栏中涉及到的基础、原理、应用开发和原生与前端的知识,梳理到一起,就形成了如下图所示的 iOS 知识体系。

小结

今天我跟你说了 iOS 开发中哪些知识是需要着重学习的,以及怎样将这些知识体系化。在学习知识的道路上,我的建议是求精、求深,基础打牢,以不变应万变。在工作上,则要注重开发效率,避免不必要地重复造轮子,理解原理和细节,同时开阔眼界,紧跟技术前沿。

说到底,不要急着看到啥就去学啥,有目的、有体系地去学习,效果才会更好。即使工作再忙,你也要找时间成体系地提升自己的内功,完善自己,然后反哺到工作上,让工作效率和质量达到质的提升,进而从容应对技术的更新迭代。

按照知识体系高效学习是很棒的,会让你成长得很快。不过,有时找个咖啡小店,随便拿起一本书翻翻,或者随便挑几篇平时收集的文章读读,再拿出小本子记记笔记,也不失为一种很佛系的学习方式,毕竟生活中总是需要点儿惊喜不是吗。

忙,你也要找时间成体系地提升自己的内功,完善自己,然后反哺到工作上,让工作效率和质量达到质的提升,进而从容应对技术的更新迭代。

按照知识体系高效学习是很棒的,会让你成长得很快。不过,有时找个咖啡小店,随便拿起一本书翻翻,或者随便挑几篇平时收集的文章读读,再拿出小本子记记笔记,也不失为一种很佛系的学习方式,毕竟生活中总是需要点儿惊喜不是吗。

感谢你的收听,欢迎你在评论区给我留言分享你的观点,也欢迎把它分享给更多的朋友一起阅读。

IOS开发高手课第一篇 构建自己的IOS开发知识体系相关推荐

  1. IOS开发高手课第二篇 App 启动速度怎么做优化与监控?

    02 | App 启动速度怎么做优化与监控? 我已经在专栏的第一篇文章中,和你梳理了一份 iOS 开发的知识体系框架图.今天,我们就正式从基础出发,开始自己的 iOS 开发知识体系构建之路吧.接下来, ...

  2. Android 开发高手课 课后练习(1 ~ 5)

    最近在学习张绍文老师的<Android 开发高手课>.课后作业可不是一般的难,最近几天抽空练习了一下,结合老师给的步骤与完成的同学经验,完成了前五课的内容. 本系列其他内容: Androi ...

  3. IOS 开发高手课 学习笔记(第一部分)

    年前购买了三门课程,Android 开发高手课.IOS开发高手课与从0开始学架构,利用工作的空余时间匆匆忙忙的,快6个月了,终于把前两门课程都过了一遍,也把其中一些遗漏的知识补充了,可以开始看第二遍, ...

  4. 《Android开发高手课》学习笔记

    最近在学习张绍文老师的<Android开发高手课>课程,学习到了很多的干货,特别是在处理问题的策略和知识的广度方面给了我很多的启发,对未来的学习也提供了方向. 目前,技术的发展有两个趋势. ...

  5. 张绍文android开发高手课读书笔记1

    本系列博文 基于是前微信高级工程师张绍文专栏 <Android开发高手课>的读书笔记. 文章所写内容是本人读完的感悟,需要原文的朋友请自行购买. Android的开发前景如何 移动互联网发 ...

  6. Android 开发高手课 温故知新篇

    首先推荐大家先阅读<Android 开发高手课>和我之前的三篇练习: Android 开发高手课 课后练习(1 ~ 5) Android 开发高手课 课后练习(6 ~ 8,12,17,19 ...

  7. Android开发高手课笔记--如何打造高质量应用?

    前言 学习<Android开发高手课>也有一段时间了,确实对技术的提高很有帮助,可以开拓自己的视野.想利用这一段时间好好整理下学习笔记,以便回顾.由于版权问题,后续笔记不再公开,感兴趣可扫 ...

  8. 微信公众号开发入门教程第一篇

    微信公众号开发入门教程第一篇 关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/ ...

  9. zc706开发板的linux开发,第一篇:zc706 开箱及开发环境搭建

    第一篇:zc706开箱及开发环境搭建 1.拿到zc706时的封装箱子,从该工具箱中打开后,将看到内含的器件: 2.其中zc706评估板具体各部分说明如下: 在拿到开发板后,默认开发板上的拨码开关以及跳 ...

最新文章

  1. ai里为什么不能随意放大缩小_平面设计基础知识:平面设计师应该熟练掌握的软件之AI。...
  2. 第十八篇:java操作Excel要处理和分辨的几个概念
  3. JNDI 和JDBC的区别
  4. C++ 静态链表(用数组模拟动态链表)
  5. android 格式化分区,Android FAT分区格式化
  6. 基于PyQt的扫雷游戏实现_下篇
  7. 【转】VirtualDOM与diff(Vue实现).MarkDown
  8. 计算机体系结构及组成原理
  9. 14款微信小游戏源码下载
  10. 如何在ps软件中查看图片的透明度
  11. 化繁为简,远光天擎助你一键云部署
  12. 播布客学习视频_C学习笔记_simple
  13. 问道怎么找回以前的服务器,问道服务器盘点“北京古都”传奇之地
  14. 2022高处安装、维护、拆除考试题库及模拟考试
  15. 在任务栏上显示/隐藏窗口
  16. highCharts图表应用-模拟心电图
  17. 虚拟计算服务器吗,云计算服务器是虚拟的吗
  18. 电脑锁屏重新开启后无网络网络适配器属性没有电源管理选项
  19. c语言程序设计讲义,《C语言程序设计》案例讲义 - 完整版
  20. 美国房价仍在上涨,但购房需求今年首次低于2020年水平

热门文章

  1. 设二叉树结点的先根序列、中根序列和后根序列中,所有叶子结点的先后顺序____。
  2. Linux查看端口进程
  3. uni-app三种生命周期及页面跳转方法
  4. 高德地图添加谷歌图层
  5. 从西贝的“不雅视频”看门店升级数字媒体重要性
  6. 运维管理系统有哪些特色
  7. 浏览器新标签页设置失效解决办法
  8. 有哪些值得推荐的半入耳式蓝牙耳机?目前最好的半入耳蓝牙耳机推荐
  9. Windows创建网络映射命令
  10. 移动宽带VS电信宽带