自學 iOS 開發的一些經驗

不知不覺做爲 iOS 開發也有兩年多的時間了,記得當初看到 OC 的語法時,愣是被嚇了回去,隔了很久才從新耐下心去啃一啃。啃了一陣,以爲大概有了點概念,看到 Cocoa 那麼多的 Class,又懵了,怎麼才能調用系統的相機?怎麼保存信息?怎麼作一個像 Twitter 我的頁那樣的頁面?總之就是不知道該從哪切入。html

如今回想起來,其實路一直都在,並且有不少條,當初若是有人可以指出一條還不錯的道,或許就能走得不那麼艱難。因而就有了這篇文章,但願對後人能有所幫助吧。ios

基礎git

必定的編程經驗github

這裏說的編程經驗是至少熟練一門編程語言,對 OOP 有必定的瞭解,最好熟悉一些基本的設計模式。遇到過的好多 iOS 開發,大可能是從別的語言轉過來的,因此有必定的編程基礎,學起來會更容易 get the point.編程

若是是第一次接觸編程,固然也是沒問題的,只是要作好心理準備,可能會比想象的難。設計模式

英語api

發現很多開發對於英語彷佛有點接受不能,一般都是中文優先,除非無可奈何,才硬着頭皮看看 StackOverflow,英文文章,文檔等。忘了是誰說過「難走的路越走越好走」,一般如此。其實只要稍微 push 一下本身,那些技術文章啃下來應該不會有太大的問題,有過幾回成功的體驗後,這種恐懼感就會減小不少。優質的文章、視頻、書籍,可能是英文的,不邁過這個 坎,未來要麼成爲瓶頸,要麼花更大的成本去填補。網絡

入門多線程

書籍app

要學習 iOS 開發,天然要先學 Objective-C (固然如今也能夠直接上 Swift,不過若是多人協做的話,OC目前仍是主流),由於 OC 是 C 語言的超集,因此瞭解 C 語言對於學習 OC 確定會有幫助,不過就算不了解,直接學 OC 也沒太大問題。

這裏推薦 BNR (Big Nerd Ranch) 的這本 Objective-C Programming The Big Nerd Ranch Guide,講解地比較細緻,能幫助你更好的理解 OC,更重要的是教你遇到問題時,如何去解決問題,以及這個問題對應的一些知識點,如何使用文檔等等。

來到一個新的世界,確定會對這個世界充滿好奇,想訂閱一大堆博客,買一堆書,看各類教程和視頻,而後就變得浮躁,不知該從哪下手,這會致使拖延症。 我渴了,給我倒一杯水,這個很直接,立刻就能夠作,但若是是給我買一瓶飲料,而本身對那些飲料又不怎麼熟悉時,就糾結了,不如刷會微博,看看朋友圈,玩個小遊戲先。

因此一本好的入門教材很重要,要契合本身當前的水平,且經常會有收穫,這種成就感會激勵着你繼續學下去。

在看書的過程當中,每每會有這樣的經歷:書中提到某我的、觀點、知識點、書、文章,而後就順着它提到的這些東西出去了,可能某個知識點又牽扯到另外一些內容,而後就這樣越走越遠。想起了一個故事——

三隻獵狗追一隻土拔鼠,土拔鼠逃跑時鑽進了一個樹洞。這個樹洞只有一個出口,不一下子,突然從樹洞裏跑出一隻兔子。兔子飛快地向前跑,並爬上另外一棵大樹。兔子由於慌亂在樹上沒站穩,掉了下來,砸暈了正仰頭看的三隻獵狗,最後,兔子終於逃脫。

對於這個故事能夠從不一樣的角度去解讀,我更願意以初心去解讀。兔子爲何會爬樹?爲何能砸暈三隻獵狗?這不是重點,重點是,以前追趕的土撥鼠哪去了?看書時不免會有延伸閱讀,這個深度我以爲不宜超過 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 來引出知識點,而後提一些問題,而且會細說解題思路。看書的過程當中,對於元學習能力的提高也會有必定幫助。

其餘資源

進入這個階段後,能夠去探索更大的世界了,如今的資源已經很豐富了,但仍是要遵循「少而精」的原則。如下是我以爲挺不錯的資源

iOS Dev Weekly 每週一期,內容多爲這一星期裏值得關注的Github項目、文章、工具等。

iOS 移動開發週報 這是唐巧大大整理的每週不錯的 iOS 開發相關的內容,多爲中文。

RayWenderlich 不少詳細又全面的教程,不容錯過。

iOS Dev Slack 國內很多 iOS 開發(包括大大們)都在這裏,不過如今好像不怎麼能拿到邀請了。

中文 iOS/Mac 開發博客列表,打開工具訂閱吧。

還有,若是可能的話,多去分享本身學到的東西,教是最好的學,我試過幾回,效果然的很不錯。

目標

這個階段下來,對於經常使用的設計模式、內存管理、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 去畫某個圖像。

其餘

我以爲不管學習什麼,「速成」的心態是最要不得的,這隻會讓本身變得浮躁,只知其一;不知其二,整個過程也很難讓本身的元學習能力獲得提高。慢慢來,攻佔一個城後,再去打下一個,這時心態也會平和許多。

相關文章
相關標籤/搜索