【分享】自学 iOS 开发的一些经验

不知不觉做为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了很久才从新耐下心去啃一啃。啃了一阵,以为大概有了点概念,看到 Cocoa 那么多的 Class,又懵了,怎么才能调用系统的相机?怎么保存信息?怎么作一个像 Twitter 我的页那样的页面?总之就是不知道该从哪切入。html

如今回想起来,其实路一直都在,并且有不少条,当初若是有人可以指出一条还不错的道,或许就能走得不那么艰难。因而就有了这篇文章,但愿对后人能有所帮助吧。ios

基础

必定的编程经验

这里说的编程经验是至少熟练一门编程语言,对 OOP 有必定的了解,最好熟悉一些基本的设计模式。遇到过的好多 iOS 开发,大可能是从别的语言转过来的,因此有必定的编程基础,学起来会更容易 get the point.git

若是是第一次接触编程,固然也是没问题的,只是要作好心理准备,可能会比想象的难。程序员

英语

发现很多开发对于英语彷佛有点接受不能,一般都是中文优先,除非无可奈何,才硬着头皮看看 StackOverflow,英文文章,文档等。忘了是谁说过「难走的路越走越好走」,一般如此。其实只要稍微 push 一下本身,那些技术文章啃下来应该不会有太大的问题,有过几回成功的体验后,这种恐惧感就会减小不少。优质的文章、视频、书籍,可能是英文的,不迈过这个坎,未来要么成为瓶颈,要么花更大的成本去填补。github

入门

书籍

要学习 iOS 开发,天然要先学 Objective-C (固然如今也能够直接上 Swift,不过若是多人协做的话,OC目前仍是主流),由于 OC 是 C 语言的超集,因此了解 C 语言对于学习 OC 确定会有帮助,不过就算不了解,直接学 OC 也没太大问题。编程

这里推荐 BNR (Big Nerd Ranch) 的这本 Objective-C Programming The Big Nerd Ranch Guide,讲解地比较细致,能帮助你更好的理解 OC,更重要的是教你遇到问题时,如何去解决问题,以及这个问题对应的一些知识点,如何使用文档等等。设计模式

来到一个新的世界,确定会对这个世界充满好奇,想订阅一大堆博客,买一堆书,看各类教程和视频,而后就变得浮躁,不知该从哪下手,这会致使拖延症。我渴了,给我倒一杯水,这个很直接,立刻就能够作,但若是是给我买一瓶饮料,而本身对那些饮料又不怎么熟悉时,就纠结了,不如刷会微博,看看朋友圈,玩个小游戏先。api

因此一本好的入门教材很重要,要契合本身当前的水平,且经常会有收获,这种成就感会激励着你继续学下去。网络

在看书的过程当中,每每会有这样的经历:书中提到某我的、观点、知识点、书、文章,而后就顺着它提到的这些东西出去了,可能某个知识点又牵扯到另外一些内容,而后就这样越走越远。想起了一个故事多线程

三只猎狗追一只土拔鼠,土拔鼠逃跑时钻进了一个树洞。这个树洞只有一个出口,不一下子,突然从树洞里跑出一只兔子。兔子飞快地向前跑,并爬上另外一棵大树。兔子由于慌乱在树上没站稳,掉了下来,砸晕了正仰头看的三只猎狗,最后,兔子终于逃脱。

对于这个故事能够从不一样的角度去解读,我更愿意以初心去解读。兔子为何会爬树?为何能砸晕三只猎狗?这不是重点,重点是,以前追赶的土拨鼠哪去了?看书时不免会有延伸阅读,这个深度我以为不宜超过 2 层,否则很容易就回不来了。

还有就是若是有可能,最好天天都看点,这实际上是很难的,由于老是会有优先级更高的事,或者以前的某些习惯在干扰。一旦断了几天,就不想再拿起来了。

还有,苹果官方的 Start Developing iOS Apps Today 也是很不错的入门材料。

视频

推荐斯坦福老头子(Paul Hegarty)的 Developing iOS 7 Apps for iPhone and iPad ,当初也是看的这个(那时仍是更老的版本),Paul 是资深的 Mac/iOS 开发(前苹果员工?),不少知识点讲得很到位,学生们的提问也大都在点上,同时配有Demo,总之听下来会对 iOS 开发有比较全面的了解。

同时推荐一本小册子:objc-zen-book,花不长时间就能看完,里面是一些 Best Practices,对于编写优质代码会颇有帮助。

笔记

这是一个持久的过程,任何阶段都适用。之前也没太在乎这个,以为概念性的东西,脑子过一遍,就大概知道了,而后就去啃其余的东西了,如今看来,若是有记笔记的话,会更有助于消化概念、知识点,也能够记录本身的思考过程。达芬奇就记录了10000多页的笔记。

记笔记能够加深对知识点的理解,而成为编程巨星的惟一秘诀就是:对所作的事情理解地越深,就会作得越好。同时若是遵循遗忘曲线去复习的话,效果更佳。对知识点了解地足够透彻后,Debug 时才更有可能知道问题出在哪,解决问题也更容易有思路。

笔记不只能够记知识点,也能够记录调试过程,好比这篇笔记,有一种调试方法:小黄鸭调试法

许多程序员都有过向别人(甚至可能向彻底不会编程的人)提问及解释编程问题,就在解释的过程当中击中了问题的解决方案。一边阐述代码的意图一边观察它实际上的意图并作调试,这二者之间的任何不协调会变得很明显,而且更容易发现本身的错误。

生活中咱们可能不会真的这么去作,这时抽离出另外一个本身,记录下跟ta的对话,也是个发现问题的好方法。

练习

这也是一个持续的过程,知道了些概念或原理后,老是会想着去验证下是否是这样,不管结果是否如本身预期,实践的过程会下降对语言的陌生感,慢慢地培养一种驾驭这门语言的自信,若是出了错,正好能够从新梳理一下。

目标

若是静下心来看完了 BNR 的这本书,以及斯坦福的 iOS 开发视频,那么对 OC 应该比较了解了,一些经常使用的 UIKit 用起来也没什么问题了,好比 UIViewController / UIView / UIScrollView / UIImageView / UITableView。也熟悉一些概念,如 KVO / MVC / Delegate / DataSource。

这个阶段下来,应该会有:哦,iOS 开发也就这样嘛,多翻翻文档,熟悉 Cocoa Touch 的一些 Class,差很少也能作出一个简单的 App 了。

进阶

入门以后,接下来能够折腾的东西还会有很多。

书籍

Effective Objective-C 2.0,里面提到了 52 种提升 iOS App 质量的途径。涉及了 API 设计、protocols / category 的使用、写出更模块化的代码等,读下来应该会有很多收获。

iOS Programming: The Big Nerd Ranch Guide (4th Edition),又是一本 BNR 的书,这本书的特色是经过 Demo 来引出知识点,而后提一些问题,而且会细说解题思路。看书的过程当中,对于元学习能力的提高也会有必定帮助。

--- update ---

发现巧哥的 iOS开发进阶 已经能够在京东买到了,虽然没有细看,但巧哥出品质量确定有保障。

其余资源

进入这个阶段后,能够去探索更大的世界了,如今的资源已经很丰富了,但仍是要遵循「少而精」的原则。如下是我以为挺不错的源

还有,若是可能的话,多去分享本身学到的东西,教是最好的学,我试过几回,效果然的很不错。

目标

这个阶段下来,对于经常使用的设计模式、内存管理、Blocks 的使用、图像操做、网络请求和管理、多线程应该比较熟悉了。对于 CALayer、Animation、UIScrollView、UITableView、UICollectionView、ViewController Container 则很是熟悉,对「很是熟悉」的定义是:不打开 Xcode,脑子里就能把相应的知识点复述出来 80% ,好比这个类有哪些方法,Delegate / DataSource 有哪些方法,怎么使用,若是要实现某个效果,应该怎么作(好吧, UICollectionView 除外)。

高级

其实高级、进阶、入门并无严格的界限,在入门阶段也能够探究高级阶段的一些东西。我以为支撑咱们不断探索和前进的动力不是兴趣,而是永不知足的好奇心,和对优雅代码的追求。

If your standards are low, you're going to stop pretty early on in the process.

BNR 的这篇 Leveling Up 已经讲得很好了,也更加细致。

书籍

iOS 7 Programming Pushing the Limits 这本书对 iOS 7 的一些特性会讲解地比较深刻,固然也不只仅是 iOS 7。只叹 iOS 更新实在太快,书籍每每跟不上,一本好书每每须要很长时间来撰写,等书能够出版了,iOS 又出新版本了。

源码

看优秀的源码,能够学到不少东西,使用过程当中遇到问题也更容易解决。这些是我以为值得细看的源码:AFNetworking(NSOperation, HTTP, Block), SDWebImage(Image Handle, Cache, NSOperation, Block), SVPullToRefresh(UIScrollView, State Handle), JSONModel(runtime)

若是有兴趣,也能够翻翻 CoreFoundation / OC runtime 的源码。

资源

工具

  • chisel Facebook 出品的 LLDB 助手,用于调试很方便
  • Reveal 每当好奇某个 App 的实现时,都会打开它一窥究竟,用于调试本身的 App 也很方便
  • Aspects steipete 大大出品的一款方便使用 method swizzling 的工具,能够在运行时动态添加代码到某个方法
  • class-dump 从 Mach-O 文件生成 OC 头文件,有时想看看某个 App 大概是如何组织的会比较方便
  • Hopper 能够对二进制文件进行反编译,甚至能够生成伪代码!有时想看看 UIViewController 里某个方法大概是怎么实现的,就能够用它。
  • Instruments 这个内置的工具对于发现 App 的各类问题颇有帮助,如内存占用、泄露,渲染问题等。

目标

这个阶段,对于底层的实现会有更深刻的了解,各类 Core 开头的 Framework 至少能够说出个大概,工具也能熟练使用,「正经的代码」写过数万行,可能每天在翻 Dash。若是别人让你实现某个功能,能在较短的时间内给出不错的实现方案,而且足够细致,甚至精细到如何使用 Core Graphic 去画某个图像。

其余

我以为不管学习什么,「速成」的心态是最要不得的,这只会让本身变得浮躁,只知其一;不知其二,整个过程也很难让本身的元学习能力获得提高。慢慢来,攻占一个城后,再去打下一个,这时心态也会平和许多。


--EOF--

若无特别说明,本站文章均为原创,转载请保留连接,谢谢

http://limboy.me/ios/2014/12/31/learning-ios.html

相关文章
相关标签/搜索