iOS 開發怎麼入門?

請問有設計模式、內存管理方面的資料嗎?最好有除了官方文檔之外的其它內容,


2017.5.22更新。

這次答案的更新主要想把此答案


------------- 原文 -------------

反對以上所有答案。

我反對理由如下:不管是斯坦福大學的CS193p公開課、蘋果官方文檔、絕大多數市場上龐雜的教學書籍都不是很適合入門同學看,想入門的話應該選用學習成本最低的方法,從最最基本開始講起,並不是一味的講解語法與知識,而是一邊實踐一邊學習知識才是最好的學習方法。

並且我想告訴題主,你問的是iOS 開發怎麼入門,但是你補充說明裡說道的設計模式、內存管理等內容暫時不用你關心,等你真正iOS入門了以後在研究吧。也許我可以這麼定義你的問題:

一個略懂編程的人並且完全沒有接觸過IOS開發的人想要學習IOS開發應如何學習?


(一)objective-c語言開發iOS應用

  1. 為什麼不讓初學者看斯坦福教程:我以為,斯坦福大學IOS公開課不適合入門的同學看,裡面第一課講解的就是MVC模式。對於一個剛入門想要學習的IOS的同學可能就完全懵了,心裡想:「我特么第一課都聽不懂我後面還學個P啊」。如果以前沒接觸過面向對象的語言學習的熱情肯定大打折扣。
  2. 為什麼不讓初學者看蘋果官方文檔:蘋果文檔是學習iOS最權威的教程,許多許多iOS高手都是常年抱著它去看,但是我覺得它的內容雖然權威但example對初學者一點都不友好,相信你很快就會失去興趣與耐心因為你光看了好多語法但是收不到的學習效果反饋。而且個人認為中文譯文翻譯不是令初學者很容易理解。初學階段,教程的易理解程度我認為是非常重要的一點。(實在要看請看英文原版。)

我不否認以上兩者是極好的學習材料,如果你入門了iOS開發並且有一定的英文功底,我是非常推薦你去看的,尤其官方文檔,應該經常翻閱。但是我認為保持學習的熱情是最重要的。本著這個理念,我推薦的學習方法難度非常低,希望你們能滿意。

  • 第一階段: RayWenderlich網站中的 The iOS Apprentice教程

這個教程截止目前已經不更新OC語言的版本了,但是如果你是抱著求職為目的的學習還是請看OC版本的(兩年前的版本)。The iOS Apprentice的教程針對完全沒有編程經驗的人設計。這個教程是外國人寫的並且有免費試讀版,感興趣的人要看看。裡面說的東西都非常非常基本,裡面一個共講解了4個不同類型app,強烈建議一步一步按照上面所寫的步驟敲一遍代碼。其中你會遇到很多複雜的語句和長的可怕的函數,你不用感到恐慌,照著敲,知道它幹嘛用完全OK了,隨著你編程時間以及經驗的增加,你都會懂得。

附鏈接:http://www.raywenderlich.com/store/ios-apprentice

註:這個教程是英文原版,並且收費,只免費提供一個app的教程。如果看完了這個免費的教程覺得還挺想繼續學的請參考 @王寒 老師的翻譯教程(只有前3個app教程,第4個教程剛出,國內應該還沒有人翻譯,如果想看只能付費)。PS:(現在開發iOS應用基本都是用Objective-C,至於剛出來的Swift現階段暫時不推薦學習,如果想了解王寒老師也做了swift版本的The iOS Apprentice教程翻譯,自己去找)
附上王寒老師教程下載地址:https://github.com/eseedo/kidscoding

  • 第二階段:培訓班的網路課程及入門書籍

經過第一個階段你應該已經大致掌握IOS開發流程,能編寫一個非常簡單的應用了。這時候相信你的熱情應該會很高漲,但接下來的學習可能會很枯燥,做好準備。網路課程的話推薦李明傑的課程,不推薦其他的。(他目前在廣州創業建立自己的培訓品牌,沒有自制力看網路課程的請去找他。傑哥開源了一些非常優秀的框架如:MJExtension )之所以不推薦其他培訓班是因為優秀講師實在是少的可憐,至少我目前接觸過的人來說,許多人都是剛從培訓班出來就拿著不菲的薪水去當講師,所以還不如自己學。

建議首先要惡補基礎知識。經過第一個階段你可能覺得你懂不少了,但是只是表面,尤其是沒學過編程的應該好好學習一下視頻前面的課程,主要看看語法。等你看噁心了看煩了就去看視頻里UI部分,這裡相對於來說比較輕鬆,一定要把視頻里寫的語句打一遍,相信這樣你理解會更深刻。裡面說的不清楚的地方上網可以百度,可以查書(如果你有書的話)。

Q:視頻教程是用來做什麼的?
A:光有實踐沒有知識是寫不好程序的,第一階段基本都是實踐,第二部分則是用來查缺補漏。 之所以推薦網路課程是因為講解的比較系統,各種入門知識都會涉及。因為iOS所涉及內容龐 大單看幾本書還是涉及不全的。

Q:上不上培訓班?
A:個人意見是不推薦去,自學足夠了。現在學習iOS的環境比前幾年好太多了,光憑藉網上的資料是 完全可以的學得很好的,如果你連這點學習能力還沒有我也不相信你將來能成為一個很優秀的工程師。而且你會發現在社會上一些互聯網公司是拒絕接收培訓班出來的人,如果你簡歷造假被揭穿以後會更要命,你當真不知道面試官看不出你水平到底是學了4個月的還是2年的么?

推薦入門書籍:
tips:以下所有書籍有英文版看英文版,有最新版看最新版。不光是iOS,你只要進了編程圈你的英文不好會很大程度上限制你的發展。而且市面上能買到的中文教程真的沒幾本能看的,渾水摸魚的厲害。

1、《iOS Programming》

2、《iOS 8應用開發入門經典》

我沒找到最新,如果有最新的看最新的

3、《iOS編程實戰》

這本書好像也沒新的了,舊的可以看看,絕大部分都差不多。

其實除了這基本書還有很多質量很好的書(比如封面都是水果類的哪些書)..
這裡我想多說一句,買iOS開發的輔導書千萬別買過時太久的,我看以上有答案還推薦iOS4系列叢書呢...拜託現在都什麼年代了,現在iOS8教程都要出來了,你iOS6的教程都過時好久了更別提iOS4了...對於新出的swift語言好多人難以選擇不知道該學OC好還是Swift好。我個人建議現在學OC,一門新語言的誕生需要經過時間的考驗與洗禮。等你學好了OC以後再看也不遲。

  • 第三階段及以後

到這個階段你應該擁有了充分的自學能力,已經達到了入門水平。
這時候以下網址將成為你的家常便飯:
Github,StackOverFlow
如果你編程遇到困難,在StackOverFlow上面應該都能找到合適的解答。(前提是你英文不要太差)。Github上好多開源代碼足夠豐富你的眼界。如果你想成為一個iOS開發者的話這上面兩個網站是你經常以及必須會用到的。


Github上怎麼搜牛人們的項目:

到此為止你的入門已經結束了,相信你已經知道怎麼開發一個App出來了,但是我還想給大家介紹一些東西,如果你以後想在iOS開發這條道路上越走越遠的話。

---------------------------- 提升篇 ---------------------------

因為iOS開發知識更新速度非常之快,每年到6-7月份WWDC大會開幕以後都會有很多新東西要學,這時候最簡單的方法有兩個:

(1) WWDC session系列視頻。

https://developer.apple.com/videos/

(2) iOS by Tutorials

所有新特性囊括其中。

3、其他適配系列教程
ChenYilong的github上每次有新特性介紹的時候都會有詳細的適配系列文章,不知道今年還寫不寫。
GitHub - ChenYilong/iOS9AdaptationTips: iOS9適配系列教程(iOS9開發學習交流群:541317935)

想學一點UI的同學可以看:

1、design+code 網址:https://designcode.io/

2、《DESIGN TEARDOWNS》

想學一點動效/交互的同學可以看:

1、下載QuartzComposer及相關插件如Origami,教程: Quartz Composer學習

其他推薦網站:

1、NSHipster

進價書單:

0、《REVCON》

又是一本Ray的書。這本書剛剛推出,內容非常好裡面有800多頁乾貨,都是以tips形式進行歸納。

1、《Effective Objective-C 2.0》(必看)

下面是中文版,翻譯不好,點名批評。

2、《Objective-C高級編程 iOS與OS X多線程和內存管理》(必看)

日本人寫的一本書,推薦看。

3、《iOS開發進階》

很多人吐槽這本書沒幹貨,其實我覺得你看完了以後有收穫就好了啊,這本書巧哥會告訴你一些編程工具一些技巧以及一些tips。

4、《iOS應用逆向工程》

5、《iOS應用安全攻防實戰》

iOS安全方面推薦以上兩本書

6、《iOS》

推薦博客及網站:
1、Github:https://github.com/
2、StackOverFlow:http://stackoverflow.com/
3、Code4App:http://code4app.com/
4、cocoachina:http://www.cocoachina.com/
5、objc中國:http://objcio.cn/

  • 進階博客(排名不分先後..)

1、王巍的博客(我們都叫它喵神,他很萌噠)
鏈接:http://onevcat.com/
理由:他的swift的新書講解的非常好,但不適合入門,進階的話這是很適合的一本書。其他關於OC的內容可以翻看喵神的博客。
2、唐巧哥的技術博客
鏈接: iOS開發如何提高
理由:據傳說是iOS圈的劉德華。巧哥05年1月會出一本進階的書,可以關注以下。
3、葉孤城的技術博客 :
鏈接:葉孤城帶你讀源碼之RESideMenu
理由:葉孤城童鞋的風格就是講解細膩,通俗易懂。
4、破船之家:
鏈接:beyondvincent.com 的頁面
理由:破船的博客內容很全面,一些開發筆記,技巧他都會教給你。
5、Xcode Dev
鏈接: Xcode Dev
理由:也是一位大神的原創博客,內容很值得學習。
6、txx"s 的博客(我們都叫它蝦神,他也超萌噠)
鏈接: txxamp;#x27;s blog
理由: 90後非常優秀的iOS開發者,看看他的大學時期的經歷才發現我們過的是多麼懈怠,大神之所以為大神也是有原因的。
7、Kevin的博客
鏈接: Kevin Blog
理由:周楷雯是一個非常厲害的90後iOS開發者,他前些年寫的項目在Github上擁有2500+star (PNchat?忘了)非常恐怖。
8、念茜姐姐的blog
鏈接: 新博客:http://nianxi.net 舊博客:念茜的博客
理由: iOS圈裡的女神級人物,她寫的iOS安全類的文章非常值得一看。
9、孫源的blog
鏈接: sunnyxx的技術博客
理由:90後iOS開發者,技術同樣非常強,目前似乎在百度知道任職。
其他的博客我就不列舉了,因為他們自己都有一個圈子大家自己去找吧很容易一找找到一堆,前提是你要有心。

(二)swift語言開發iOS應用

這裡推薦兩個入門學習比較好的方法
1、http://appcoda.com的網站(難度指數:※)
非常淺顯易懂的入門級swift教程:http://www.appcoda.com/tutorials/

這個網站可以看兩方面:

(1)、隨時更新的swift tips (有一定水平在看)

(2)、新手主要看以下這本書

2、《Swift Tutorials》 依然是raywenderlich出品,目前只有英文版。

3、官方swift譯文教程 《The Swift Programming Language》中文版

4、上文提到的王巍的博客(喵神)《Swifter - 100 個 Swift 必備 tips》以及http://objc.io相關書籍《函數式Swift》

這兩本書是swift裡面非常難得的學習資源,好好研讀可以讓你少走很多彎路,必看。

ObjC 中國 - 書籍
以上是鏈接,給喵神打廣告我也是心甘情願的..因為想套路他妹妹已經很久了:-D


等我想到再補充。以上。


在答題之前,我要先感謝知乎上關於iOS開發入門的所有提問和答案。沒有這些提問,我不會萌發自學iOS開發的念頭;沒有這些優秀的答案和答主們的勵志經歷,我也堅持不到最後。在這裡,尤其要感謝 @郝健宗 @蘇菲 @王傑 @Judy Zhu @張中寶 @Wang Hailong 這幾位前輩的答案,對我幫助很大。

最近我找到了一份iOS開發的正式工作,所以想把自己學習iOS開發過程中的經驗和心得寫出來,希望能夠幫助那些努力但迷茫的初學者。


首先介紹一下自己的背景,我大學學的是機械專業,與計算機有關的課程只有一門C語言,在接觸iOS開發之前,我已經在一家機械製造行業的公司工作一年多,做的工作也與計算機毫無關係,所以我屬於零基礎轉行。


2014年10月,出於對機械行業的種種失望和對互聯網行業的濃厚興趣,我萌發了轉行的念頭,於是開始利用下班時間自學計算機知識(Java、Python、數據結構與演算法)。學了大概兩個月,基本的東西有了大致的了解,但是感覺要熟練掌握還是任重道遠。由於時間安排上的原因,我就將重心轉移到iOS開發上面。


2015年1月,我開始開發我的第一個iOS應用,這款APP從第一行代碼到蘋果App Store上架用了大概兩個月的時間,但總的時間跨度有接近4個月(春節期間停滯了一個多月,等待蘋果審核10天)。APP上架後,我就開始投簡歷,並拿著我的APP去面試,很幸運地拿到了幾個還不錯的Offer,然後就挑了一個去上班了。


下面就是我自學iOS開發的一些經驗和心得。


一、
準備工作

1. Mac、iOS設備、開發者賬號

這些是做iOS開發必須要有的,而且是一大筆錢,但不要怕花錢,因為這些都是值得的。如果能夠學有所成,一兩個月的工資基本就回本了。就當是自己交的一筆「培訓費」吧。


2. 心態上的準備

如果你和我一樣是零基礎轉行iOS,那麼一定要有破釜沉舟的勇氣和決心,並做好打持久戰的心理準備。如果畏手畏腳、瞻前顧後,我勸你還是想好了再來,免得浪費時間和金錢。我當初收入很低,是拿了3個月的工資買的Macbook,還天天擔心丟了或者弄壞;後來學習到小有所成時毅然選擇了裸辭,孤身一人來到陌生的上海,經過2個月的待業狀態才找到工作。這一路走來都承受著巨大的精神壓力和物質壓力。

二、
學習路線

1. 對編程的基本認識

如果你是完全的零基礎,我建議先要對編程有個基本的認識。建議從C語言入手,因為C語言比較簡潔易上手,並且和Objective-C很相似。


視頻推薦網易雲課堂的

「計算機專業體系」課程,很適合入門。

書籍的話,推薦《C
Primer Plus》。


2. Objective-C語言學習

當對C語言有個大致的了解後,就可以開始學習Objective-C了。


推薦書籍:

《Objective-C基礎教程》

《Objective-C程序設計》

註:這兩本內容都差不多,但《Objective-C基礎教程》寫的更好、更經典,建議以這本為重點精讀。但是這本寫的比較籠統,難度稍高,所以如果遇到不懂的地方就看看《Objective-C程序設計》,這一本寫的簡單、詳細一些。


需要掌握並熟練運用的地方:

1) 面向對象編程的基礎知識。包括:面向對象與面向過程的區別、為什麼要面向對象編程,類、對象、繼承、方法、屬性、介面等概念的理解與使用。

2) Foundation框架。主要是NSString類、NSArray類、NSDictionary類、NSNumber類、NSRange類的熟練運用。

3) 內存管理MRC、ARC的原理,委託delegate、協議protocol、類別category、塊block的理解與使用。


3. iOS SDK/Cocoa Touch學習

有了Objective-C基礎,就可以開始邊看斯坦福公開課邊做APP了(個人覺得沒有OC基礎直接看這個會很吃力)。視頻如下:

斯坦福大學公開課CS193P《iOS7應用開發》(Objective-C語言)

斯坦福大學公開課CS193P《iOS8開發 》(Swift語言)


推薦書籍:《精通iOS開發》


第一個iOS應用:

蘋果官方有個做iOS應用的教程——《馬上著手開發iOS應用程序(Start
Developing iOS Apps Today)》。強烈建議以這個Demo作為你的第一個iOS應用,因為這個教程能讓你對一個iOS應用的搭建有個非常全面、細緻的認識。完成了這個Demo後,就可以結合斯坦福公開課學到的東西創建屬於你自己的APP了。


需要掌握的地方:

1) MVC設計模式。只有理解了iOS的MVC架構,才能把一個應用解剖成一個個單獨的部分,這樣你在開始做一個項目的時候才不會茫無頭緒。

2)UIKit的各種控制項。特別是UITableView和UICollectionView一定要掌握,因為大部分的iOS應用都是由這兩種視圖搭建,吃透了它們那可玩的花樣就很多了,其樂無窮。

3) 導航控制器UINavigationController和選項卡控制器UITabBarController。同上,這兩個控制器也是絕大多數iOS應用UI框架的根基,也是多個MVC協同工作的最典型例子。

4) 場景切換的實現——Segue。熟練使用Segue很重要,因為一個應用一般都是各個界面輪流出現的,兩個界面之間怎樣實現跳轉、怎樣將一個界面的數據傳遞到下個界面,這都是實際開發中會遇到的問題。

5) Storyboard和AutoLayout的使用。這兩者是一個應用的UI界面設計不可或缺的部分。

6) 其它iOS高級編程。包括:數據存取CoreData/SQLite、多線程GCD、繪圖CoreGraphics、動畫CoreAnimation、網路編程、手勢Gesture、多媒體AVFoundation等等,這些內容都可以實際用到時再深入學習。

7) 第三方庫的使用。參考:GitHub 上都有哪些值得關注學習的 iOS 開源項目? - 編程


4. 堅持寫代碼、查文檔、讀技術博客

學習編程,一定要勤於動手,看再多的書、再多的視頻,如果不動手敲代碼都是白搭。哪怕書上和視頻上的代碼你一行都看不懂,也要親手把代碼敲一遍、把Demo親自實現一遍,這很重要。編程是手敲會的,不是眼睛看會的。


學習iOS開發的過程中,有遇到不懂是正常的,別害怕不懂,Cocoa的內容細節本來就多,每年的WWDC還會發布一些新技術。所以遇到不懂的知識一定要學會查蘋果官方API文檔:iOS Dev Center


做APP時,如果一個地方不會實現,或者遇到解決不了的問題,一定要學會使用Google搜索。一般來說,初學iOS遇到的問題,Stack Overflow上都有類似的提問,基本一搜一個準。


此外,CSDN等一些技術博客上的文章也很有參考價值。推薦一些優秀的iOS技術博客——中文 iOS/Mac 開發博客列表:tangqiaoboy/iOSBlogCN · GitHub

三、寫在最後的話

如果你能按照以上所述做出一個APP上架並找到工作,那也基本算是入門了。但這並不是終點,這只是一個新的起點。iOS開發,乃至整個計算機/互聯網行業,後面的路還很漫長。蘋果的整個Cocoa框架,可謂是博大精深,裡面可以深挖的東西太多了;而且一個程序、一段代碼可以進行的優化是沒有止境的。作為開發者,只會一門語言是不夠的,網路編程、資料庫、演算法、設計、交互等等東西都是需要掌握的,而語言只是實現這些的工具,語言其實是最簡單的。


此外,如果你和我一樣是非科班出身,還需要把計算機基礎課程補回來,即:數據結構、演算法、操作系統、資料庫、計算機網路、編譯原理等。因為這些知識是你的「內功」,這些基礎直接決定了你在這個領域的天花板所在的位置。


當然,基礎差一點也問題不大,最重要的是你對計算機、互聯網的熱愛和熱情。你需要有很強的自學能力,不斷地去學習新知識,才不會被這個日新月異的行業淘汰;你需要保持一顆好奇心,不斷地嘗試和接受新事物,不斷地創新,守舊的人在這個行業無法生存。在我找工作的過程中,那些知名的大公司都是直接在簡歷關就將我刷掉了,而那些給我Offer的公司,無一例外都表示,之所以選擇我是因為欣賞的我的熱情、看重我的自學能力。


所以,如果你和我一樣對iOS開發充滿熱情,敢於接受挑戰,那麼就從現在開始努力吧,我在前方的路上等你!

——————————————————————————

iOS開發QQ交流群:426310126,加群請註明知乎。

——————————————————————————


------- 2015年7月22日更新 ------
剛開始做程序員的時候,曾經把自己自學iOS開發的一點經驗寫在這裡分享。不知不覺,至今也獲得了400多贊。後來陸陸續續有人私信我諮詢iOS學習的問題,最近有一位大四的學生給我發私信,我覺得他遇到的問題比較典型,下面我把他的問題和我的回復貼出來,供參考。

我的計劃大概是這樣的:先看計算機導論課程,然後開始學習C語言編程,後續大概通讀一遍SICP、CASPP、演算法導論,然後學C++ primer。學到這裡就開始學習object-c/swift,然後自己做一個app,帶著這個去找一份工作。 我的計劃會不會太偏重原理了呢? 我總是擔心基礎不好的話後續職業發展會受印象,卻又怕一年時間完成不了這麼多,到時候連工作都找不到。 請問我應該怎樣平衡呢? 或者我可以先學一部分基礎,然後先嘗試實踐完成app開發,以後再補回來? 您覺得在iOS開發過程中哪些基礎是比較重要的呢?

你好,我將我這兩年的一點經驗盡量說明白供你參考。

先說我的看法,不客氣地說,你的學習計划過於龐大,要學完這些知識,不要說一年,三年可能都不夠。所以非常不建議看完你羅列的所有知識才開始進行app開發。

就我的經驗來說,我是用晚上和周末來學習的。我用業餘時間看演算法導論,半年只學了1/5,後來還是放棄了。去年花了足足半年學習Code Complete。今年開始學習CSAPP,花了半年時間學了差不多一半。

基礎知識對於職業生涯確實非常重要,所以我會在今後的職業生涯一直保持學習。但是如果不是已經在從事iOS開發工作,我肯定不會看這些書。

所以對於你來說,如果想從事這份職業,要先學習寫一個iOS app最必需的技能,通過解決問題驅動自己學習!學習這些技能,對於一個零基礎的人,我想fulltime學習3、4個月應該足夠了。這些知識包括:Objective-C或swift的基本語言知識、Cocoa框架的基本知識、xcode的基本用法。在這個階段,找編程的感覺,跟網上課程編一些課後作業demo app是一個好選擇。

在這個階段,你甚至可以不用學習C、演算法、計算機系統等。

但是可以花時間想想自己用4個月時間,從產品角度想想,可以做出一個什麼樣的app?在紙上畫一下app產品流程圖,爭取弄一個出來。

遇到問題怎麼辦?自己查資料,問人,解決。

然後你會發覺需要解決的問題越來越多,需要了解的知識越來越多,你之前羅列的資料自然就有動力每天學習下去了。

非常欣賞你學習基礎知識的渴望,但是要注意辦法,不要嘗試一口吃下整個大象。

--------原答案-------------
自己去年12月的時候說要更新一個詳細的答案,結果就被我自己爛尾忘記了,最初寫這份答案的時候自己還是在摸索階段,推薦了下面這些材料:

  1. 斯坦福大學的CS193p公開課:最新版是2013年winter。課程不僅包括iOS入門基礎知識,而且還會布置由該教授親自設計、涵蓋整個課程的作業。
  2. 蘋果官方文檔:每一份GUIDE都是一本迷你的教材,寫得很精緻,而且每一份guide都會延伸到其他知識。可以從這篇開始:馬上著手開發 iOS 應用程序。
  3. Ray Wenderlich:很多step by step的教程,適合掌握一定知識之後跟著教程做著玩。

上面這三分資料,確實就是我剛開始學習iOS開發的時候用得最多的資料,在著手開始iOS Code之前,需要學習相關Objective-C的知識。
對我幫助最大的可以說是CS193p這個課程(免費的哦),我跟著這個課程一行一行代碼完成布置的作業,課程完成之後我就能夠自己寫一個簡單的app出來,並且我也知道該在哪裡問問題、怎樣找答案(很重要)。
當我了解整個app的製作流程之後,我就給自己定計劃,1個月之內必須開發出一個app,從原型設計、界面設計、到CODE。
最終我做了幾個實驗性的app,雖然沒有在app store上架,但是能夠在自己的ipad、iphone上運行展示,我就拿著這幾個app去面試,很幸運地找到現在的工作。
工作之後一直在使用的材料:

  1. 蘋果官方文檔,必須的參考書;
  2. StackOverFlow,一有問題就問他;
  3. Github,搜索關鍵詞iOS或者objective-c,會發現很多高手已經把大部分基礎性功能實現並且貢獻出來了;

另外teamtreehouse提供收費的在線教程,應該比較容易入手。
所以我認為,其實用什麼材料雖然也很重要,但是市面上優質的材料呢,不外乎那麼幾份,最重要的是自己有一個idea要落實下來把它完成、寫成一個app,這個過程當中自己自然就會去找答案、找材料、解決答案啦。
希望能幫助到跟我一樣初學入門的朋友。


感謝這個問題下給予iOS初學者諸多幫助的答案。以下是我從7月份開始學習iOS以來所做的事情的整理,供後來者參考。答案中所推薦論壇和學習資源都是我自己用過的。

一,前期準備
一台Mac Pro或其他蘋果電腦
從Apple Store上面下載需要的Xcode版本並安裝
如果你是工作上進行iOS開發,別忘記詢問你所需要的開發相關的賬號,比如查看錯誤日誌或者共享代碼資源等。

二,學習準備和計劃
我的背景:編程經驗為今年4月開始接觸java三個月,無C語言經驗,無objective C經驗。對開發完全沒有概念,但是需要快速掌握。看視頻和循序漸進的方法都不適合我。

1. 不知道先學什麼,所以簡單搜索發現國內比較權威的論壇,一般來說國內比較大型的論壇都會有新手需要的整套資源。發現這個新手初學 iPhone 開發的路線圖。這個圖建議沒接觸過C語言的人先去學C。因為我要快速學習所以放棄。然後到zhihu本問題下閱覽 @若虛行的答案,裡面有提供很好的入門地圖,但過於複雜。這兩個資源都比較適合長期學習的人制定計劃。

2.根據各個地方的建議,下載了以下文件:
A. Your first iPhone Application中文版 蘋果的入門官方文件
馬上著手開發 iOS 應用程序 (Start Developing iOS Apps Today): 設置
B. iPhone App Programming Guide 比較詳細的蘋果的開發手冊。沒有中文版。為了將來溝通方面我下了日文。
iOS App Programming Guide: About iOS App Programming
C.蘋果官方的界面設計指南。由於和開發本身關係不大,所以可以不必立刻學習。對UI設計感興趣的話可以看看。
iOS Human Interface Guidelines: Designing for iOS 7

學習方案STEP 1:
1. 簡單的基礎知識普及(0.5天)
強烈推薦這個鏈接:iOS開發新手專題
裡面解說了很多很基礎的概念和名詞,對我這種完全無IT背景的人來說是救星。還包括了objective C語言的快速入門,對於會一門以上編程語言的人來說節省了不必要的時間。
2.找了一本簡單易懂的漫畫objective-C教程。因為通過java知道了基礎的編程思想,所以主要是熟悉這門新的語言。裡面有些內存管理之類的,光是看書很難有具體的理解,沒關係,讀完。(2天)
2. 粗讀iPhone App Programming Guide,主要目的是了解這門語言的特點和能幹什麼,和我知道的java的區別,知道有什麼功能即可,實際編程時再翻開參考。(1天)
3. 細讀Your first iPhone Application中文版,徹底理解每一個知識點並且在Xcode上實踐。(2天)
4. 把 iOS6實踐指南 裡面還沒有涉及到的部分讀懂做會。(我只是2天過了一下,沒詳讀所有部分,建議有時間的人用一周去熟悉每個部分)
CocoaChina翻譯組貢獻:iOS in Practice《iOS 6實踐指南》全書翻譯完整版下載
5. 利用公司的資源製作一個餐館搜索App。(3天)

經過STEP 1的學習,我大概對iOS開發有了一個極其極其粗略的認識。包括它的MVC模型的構建方法與當年用java寫網站不同,包括它的內存管理比較麻煩,包括它的.h 和.m文件以及裡面的屬性等設置時需要注意的。但是對這些認識我都還沒有清楚的答案。

編程在書本上往往是非常抽象的概念和講解,在這門科目上我完全是個實踐型的學生。看書總是一頭霧水,只有實際做東西才會有成長。所以帶著這些極其粗略的認識我進入到了第二步。

學習方案STEP 2: 大量的代碼閱讀和一點點動手。
閱讀:

帶著這樣粗淺的學習我就進入了iOS開發團隊。無論是leader還是我自己都覺得這個水平簡直不能寫代碼。但是leader還是給了我一些非常簡單的工作,比如調整UI,把AB TEST真正寫入程序等等。在這個過程中我首先得把自己負責產品的代碼讀明白,至少得知道修改哪裡才行吧!在閱讀前輩們寫下的代碼時,STEP 1裡面的那些疑問就一點點清晰起來了。

讀書終究是泛泛而過,而當你有一個目的或者任務的時候,才會去真正理解每一行代碼的意義。對於沒法在公司接觸代碼而是自學的朋友,可以去這個問題GitHub 上都有哪些值得關注學習的 iOS 開源項目? 下用github下載開源代碼閱讀。(到了這裡,GitHub也應該是你列入學習計劃的東西之一。)
如果有一個精通iOS的人在你身邊隨時解說是最好的了。但我們都很難有這種機會,所以善用google,善用Stack OverFlow(一個類似知乎的編程QA網站)。大部分問題都可以通過搜索解決。

動手:
往往我在寫代碼的時候,都是邊開google搜索邊學習邊寫的。雖然不比專業的iOS編程者速度,但至少超過了leader對我預想的開發速度。當然寫代碼僅僅是開搜索和copy-paste是不行的。但在初期做非常簡單的開發時,這樣的方法可以讓你快速上手又能品嘗到編程的樂趣。

對於自學的同學,我的建議是,看過一些案例之後,你可以試著把案例中的各種功能重新排列組合。教程很多是做一個帶相機功能的app,或者一個checklist,做起來很是乏味。你要定下一個真正想做的東西,並且好好地畫出UI設計,不要想著只是練習代碼。這個過程會是樂趣無窮而且充滿挑戰的,認真的態度也可以讓你堅持在遇到困難的時候也做下去。


學習方案STEP 3:
再往下我只能推薦你去繼續寫。因為我覺得學習編程最好的途徑就是 實踐-遇到問題-解決問題。但是一直到STEP 2我們都是在寫各種各樣簡單的小程序,多少也膩了。
我建議的幾個方法:
1. 找一份可以允許現在的你進行iOS編程的實習或者工作。(這也許較難,因為大部分公司都希望直接找到生產力而不喜歡慢慢培養初學者)
2. 找幾個有想法的筒子一起認真做個項目。(如果你的團隊里有編程厲害的人更好,但你必須相應地提供自己的價值)這和自己練習是不同的。


再往後的學習,就是反覆的進行STEP 3的1和2啦。當然在這兩個過程中,與各種人的交流啊,搜索啊,進一步的書本學習都是可能發生的。但我覺得貫徹1或2的行動是最重要的,沒有他們,你很難保證持續的學習動力。


--果然收藏是贊的三倍--

之前一直關注著這個問題,也從中獲益很多。現在,投入了約200個小時,我上架了自己的第一個簡單的App,終於可以來回答了。
---

目錄:

  1. 確認個人目標
    • 分析個人情況
    • 設計自己的路線
    • 記錄學習的過程

2. 開始吧

    • 語言
    • 了解你的工具——Xcode
    • 基於項目的學習
    • 從簡單App開始, 分析其生命周期
    • 學習框架
    • 理解概念
    • 動手,不斷犯錯,不斷改進

3. 界面

4. 資源

    • 課程
    • 網站
    • 文章

---
正文

1. 確認個人目標

  • 分析個人情況

在聽取建議之前,想一想自己的情況會更有效。比如,你有面向對象的編程經驗嗎?如果有,那麼語言學習就不需花太多時間。英語如何?基本的英文文檔能讀懂嗎?適合你自己的學習方式是什麼?
對我而言,軟體工程在讀,基礎課程都學過,入門較快。學校更多是在教理論,我更偏向在實踐中學習(learning by doing)。

  • 設計自己的路線

了解自己的基本情況之後,就可以設計自己的學習路線了。一開始不會有完整的路線,需要根據自己的情況不斷的調整。不妨讀一讀其他人入門的文章,吸取經驗。

  • 記錄學習的過程

你怎麼知道自己學得如何?傳統教育,會有傳統考試作為檢驗。我的做法是,記錄過程,設置檢驗點,尋找概念的共通性,舉一反三,問問題以及寫作總結。

2. 開始吧

一開始熟悉編程語言,然後了解開發工具Xcode,理解大概的項目框架,App生命周期,界面如何和代碼交互。理解設計模式,例如MVC。之後,就可以開始與Cocoa框架交互。最後,根據你想要寫的App類型,再針對性的學習。

  • 語言

如果把寫App比作是建房子,那麼語言就是基本的磚塊。那麼,應該學習Swift還是Objective-C呢?我個人的建議是先Swift,之後再熟悉OC。相比較OC,Swift更易上手,社區也日漸活躍。如果你有編程經驗,這一步應該不會花去太多的時間,get your hands dirty才是關鍵。

  • 了解你的工具——Xcode

工欲善其事必先利其器,快速的熟悉Xcode界面,各面板功能,常用的快捷鍵等等,會提高不少效率。

  • 基於項目的學習

除了斯坦福大學的iOS開發入門之外,我個人很喜歡的一套教程是[Teaching App Development with Swift](Swift Education)。它主要的觀念就是基於項目的學習,每課時都有不同的項目,一個項目多個課時,清晰的步驟一步步搭建起完整功能。由實踐引出知識點,最後給出延生思考和資料。

  • 從簡單App開始, 分析其[生命周期](https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/doc/uid/TP40007072-CH2-SW1)

  • 學習框架

框架是什麼?
很多系統的功能,都是不需要你實現的。想像你自己在拼一輛四驅車,馬達啊,輪子啊,車身啊,一開始,這些你都不需要自己造。你需要知道的只是,每一部分的功能是什麼,怎麼把他們拼裝在一起,哪一部分拼在哪裡。同樣的,框架就像是各種各樣的零件,比如UIKit,可以改造車身外觀,多媒體需要用AV Foundation。

總之,要弄清兩個問題:
1. 什麼時候用什麼?(When to use what?)
2. 怎麼用?(How?)

  • 理解概念

一邊練習一邊思考思考,各概念之間的聯繫與區別,多問幾個為什麼。比如:delegate、protocol、tagart-action、closure 。

例如,其中的Protocol,我是讀了[iOS 8 Programming Fundation with Swift (Matt Neuburg)](iOS 9 Programming Fundamentals with Swift - O"Reilly Media)中的介紹,才徹底理解。

  • 動手,不斷犯錯,不斷改進

做完整的項目,而不只是一個功能點的練習。完整的項目,需要綜合的考慮。界面的設計,類的設計,對象之間的交互等等。 一開始不知道如何實現時,不妨先看看其他人的實現。你可以查找書籍,在Github上閱讀相關功能的源碼,上StackOverFlow提問等等。

3. 界面

Apple很重視用戶體驗,學習基本的界面設計也是很必要的。之前完整的看了[DesignCode](https://designcode.io)的教程,了解了基本的設計以及Sketch的使用。iOS Human Interface Guide也是開發之前的必讀書。
界面布局的時候,不得不提一句AutoLayout,一開始使用很可能會出現各種問題,不過領路要領之後,你會發現它的強大之處。


---

資源:

網站:

  1. http://www.developer.apple.com/ 官方資料。文檔閱讀,一開始可能不知道如何下手。有一篇[博文](蘋果Xcode幫助文檔閱讀指南)寫得十分詳細。當然,[iOS 8 Programming Fundation with Swift](Matt Neuburg)書中第八章也是有介紹的。
  2. http://github.com 程序員界Facebook。
  • GitHub - ipader/SwiftGuide: 這份指南彙集了Swift語言主流學習資源,並以開發者的視角整理編排。http://dev.swiftguide.cn
  • GitHub - matteocrippa/awesome-swift: A collaborative list of awesome swift resources. Feel free to contribute!
  • Stack Overflow 技術問題版知乎
  • http://www.raywenderlich.com/ 聲名在外的系列教程。
  • NSHipster 你不知道Mattt Thompson?快去看看吧。
  • https://www.objc.io/ 基礎到進階推薦。
  • https://designcode.io/ 了解設計流程,基本界面交互、動畫等。當時完整的跟著做了一遍,收穫良多。
  • 書:

    1. The swift programming language
    2. [iOS 8 Programming Fundation with Swift (Matt Neuburg)](iOS 9 Programming Fundamentals with Swift - O"Reilly Media)
    3. [Programming iOS 9 (Matt Neuburg)](Programming iOS 9 - O"Reilly Media) 個人強烈推薦的兩本書,一直不斷的在看,講解細緻,覆蓋全面。
    4. Learning iOS UI Development (Yari D"areglia)
    5. Yair D"areglia的博客也值得一讀:Think Build

    Post:

    1. [Things I wish I had known before starting iOS development](Things I wish I had known before starting iOS development a€」 Part 1 a€」 iOS App Development)
    2. [iOS開發如何入門?——知乎](iOS 開發怎麼入門? - Franz Fang 的回答)
    3. [自學iOS開發的經驗](Limboy"s HQ)

    我只列出了常用的資源,資料不在於多,而在於合理的利用。一個想法的開始很簡單,按下收藏也很簡單。不簡單的是,開始去做,開始去實現。相信,如果你也願意付出200小時,你也能完整的將自己的想法實現為應用。

    希望對你有幫助: ~)


    ----
    PS:我的第一個App地址:https://appsto.re/cn/jnCgbb.i
    當然,這不是我寫的第一個App,你可以在[我的github](Yogayu (Xinyu You) · GitHub)上看更多的項目,比如開源的[EmotionNote](GitHub - Yogayu/EmotionNote: This is a notebook that can feel your emotion!)。

    最近App更新了2.0版本~


    如果你想進一步了解開發過程,可以閱讀我寫的《獨立開發紀錄》http://www.jianshu.com/p/35e9b1f821c4。


    多看開源的吧。實在不行照抄開源里的也行。到一定階段後,還是要看蘋果文檔才能提高。

    推薦到iOS Code Hub網站(http://www.ioscodehub.com),上面收集了很多開源APP.


    入門的姿勢應該簡單點。

    有人打算考托福,會花大量的時候做準備工作,買書,下載音頻,加入各類群。沒多久就把熱情消磨掉了,難正兒八經的單詞卻沒開始記幾個。

    比準備更有效的入門方式是,簡化步驟,馬上開始。

    對於入門者,不需要其他資料,官方文檔是最好的起步石,系統的閱讀一遍,再找個 app,臨摹幾個簡單的頁面和功能,比什麼書,什麼課程都更實際,更有效。


    曾經自學iOS開發一個月搗鼓出來一個簡單的日程管理APP https://itunes.apple.com/cn/app/lean/id903615490?mt=8,發布後幾天鬼使神差地進入了App Store的推薦榜,獲得了不少好評。本人算是多年的程序員,不具有代表性,只是回顧一下當時的學習經歷,僅供參考。

    入手第一台Mac後(至今後悔為神馬快到晚年了才入手),就想著試水一把iOS開發,老婆說希望找個好用的Todo管理APP,心想就拿一個簡單的Todo應用祭旗吧。

    我上來看的是Standford的iOS教程,不太喜歡看視頻,基本拖著過,主要看配套的講義,視頻主要目的當是練聽力。當時還是Objective-C的版本,OC語言看的是官方文檔,適應一下函數調用語法,Category、Protocol和Block幾個概念要了解下,一兩天就差不多了,開發過程中逐漸適應就順手起來了。

    這中間很大一部分時間,是在琢磨交互的設計,自己那段時間對交互設計也比較感興趣。下載了大部分流行的Todo App來研究,重點考慮了自己的單手操作習慣,這也是後來能進APP Store推薦榜最主要的原因。

    動手前,考慮過一個問題,就是StoryBoard,XIB和純代碼UI,選擇哪種方式。看了幾篇博文,也想到StoryBoard是蘋果目前主推,就直接StoryBoard了。

    從UITableView開始搞起,先整出來一個最簡單的Todo的列表。發現沒有checkbox控制項,就搞了個基於圖片的實現,學會了怎麼基於StoryBoard來搞自定義的UTTabelViewCell。

    接下來導航進入一個具體Todo需要Navigation Controller了,中間嘗試了幾種View Controller之間傳數據和返回數據的幾種方式。通過Delegate,通過Notification Center,寫Segue相關的回調實現,在StoryBoard中設置,直接API調用,等等,多試幾種方式以及相關的組合,基本對視圖怎麼跳過來跳過去的就瞭然於心了。然後學微信的樣子搞了個Tab View Controller把幾部分內容裝起來。

    花時間最多的是手勢的操作,參考一些APP的之後,自己設計了一套操作手勢。讀官方文檔,基本把UIGestureRecognizer搞明白了。然後上Github去找與我想法類似的庫,沒有特別符合要求的。後來自己參考了一個開源庫代碼,做了大量修改,實現了想要的手勢操作。在過程中,對手勢操作以及OC語言本身都掌握得比較熟練了。

    數據存儲是Core Data,看Standford教程,讀文檔,業務模型很簡單,在StoryBoard中可視化地拉了兩張表,基本就搞定了。

    比較坑的是NSFetchedResultController,因為Todo的拖動、排序和編輯等操作和Table View默認的操作是完全不同的,各種錯誤,StackOverflow上的帖子翻遍了,搞了幾天解決不了,遂放棄,自己封裝了一層跟Table View交互的數據層。

    嘗試了加一些小的動畫效果,比如Todo更新後閃動一下之類的,UIAnimation就夠了。然後用NSUserDefault保存一些細節信息,這些信息對於交互上的一些小改進其實很有作用。然後是調整一下代碼細節,優化一些View的顯示。

    然後做了代碼重構,主要UITabelViewController,把MVC三部分代碼做了更好得分離,也將一些公共抽象提取出來作為protocol,對代碼設計基本就還算滿意了。這段時間發現了https://www.objc.io/這個網站,很有幫助。

    之後就是找了一個好朋友幫我畫了一些圖,做了icon,基本就算完工了。

    第一次提交被拒了,因為app網址隨便填了個我們學校的網站,太隨意了。第二次改成老婆的微博地址,然後就通過了。從開始學習iOS開始,剛好一個月時間左右。

    上線後幾天就是打開itunes connect之後,突然發現用戶增加了近萬,發現竟然進了推薦榜,最高的時候一度在效率榜排進幾,貌似12306的APP就排在我的旁邊,不過過了一周就沒落了,哈哈。

    後來其實花了不少時間,要做第二版。增加了提醒,雲端同步,即時通信,好友管理等一堆功能,大部分都做好了,都還有一些需要完善的地方,一直沒有提交。因為做其他事情沒有時間,暫時擱置了,等哪天有時間有心情的時候,再重新撿起來把。

    後來為了寫一個iOS教程,就用Swift開始重寫這個APP,不過也半途而廢了,沒完全寫完,而且Swift語言也更新不少,內容也應該需要一些更新。越來越感概木有時間編程了。有興趣的同學可以看看:iOS應用開發 | 天碼營

    已經寫完的內容包括:

    第1課 環境準備
    第2課 Swift基礎
    第3課 Swift作業解析
    第4課 UITableViewController
    第5課 自定義的UITableViewCell
    第6課 MVC
    第7課 App的生命周期
    第8課 協議的使用
    第9課 理解可選類型
    第10課 UIViewController和UINavigationController
    第11課 Segue與數據傳遞
    第12課 Unwind Segue
    第13課 通知中心NSNotificationCenter
    第14課 日期選擇器UIDatePicker
    第15課 XIB的使用
    第16課 可選(Optional)協議
    第17課 Core Data
    第18課 NSFetchedResultController
    第19課 細節優化的小技巧
    第20課 UITabBarController
    第21課 作業詳解與回顧(1)
    第22課 作業詳解與回顧(2)
    第23課 分頁和UIActivityIndicatorView
    第24課 UIGestureRecognizer


    ------2016年2月24日更新------
    更新內容:
    1.更新了推薦書籍以及書本出處。

    入門呢,先多了解下iOS開發的知識樹。樹上有什麼大枝大葉,心裡有個數最好。平時多看看書,多和前輩討論技術,就get很多經驗的。選對了位置,再逐步突破不懂的點,之後開始研究一些有深度的領域,一萬小時定理你懂的。

    首先推薦一些進階的書籍(不好意思哈,看的不多。):
    1.《Objective-C基礎教程》
    2.《Objective-C編程之道:iOS設計模式解析》
    3.《Objective-C高級編程(iOS與OSX多線程和內存管理)》
    4.《EffectiveObjective-C》 [機械工業出版社 Effective系列叢書]
    5.《iPhone開發秘籍》Erica Sadun著
    [註:以上除Effective那本之外,4本都是人民郵電出版社 圖靈叢書系列的]


    接著,大概羅列下一些技術劃分。


    初級階段:



    就Objective-C而言:

    1.Foundation框架、Catagory、KVC、KVO、Protocol、Block、引用計數等基本知識有有所掌握。
    2.注意代碼規範。

    iOS開發的通用控制項而言:
    1.UIView方面相關控制項(UILabel、UIImageView、UIButton、UISlider、UISwitch、UIScrollView(TableView、CollectionView、TextView)、UIWebView、UIWindow、UINavigationBar、UITabBar)。
    2.了解UIViewController的生命周期,Navigation的堆棧原理等等。
    3.千萬別只用代碼寫UI,把Xib、storyborad搞搞清楚,特別是AutoLayout用好來也很重要。
    4.NSNotifaication,怎麼說,也是個大頭,單獨拿出來好好研究下。
    5.手勢。UITapGestureRecognizer、UIPanGestureRecognizer、UILongPressGestureRecognizer、UISwipeGestureRecognizer、UIRotationGestureRecognizer。
    6.屏幕的旋轉,這個坑要多走走才過的好。
    7.Localizations
    8.文件管理,Bundle、NSFileManager。
    9.數據存儲,UserDefault,KeyChain、NSKeyedArchiver。
    10.ARC


    iOS動畫:
    1.UIView動畫封裝
    2.Controller 相關的TransitionStyle
    3.CAlayer。

    設計模式:
    這部分內容研究,建議拿一些開源企業級框架進行學習。本人當時是哪BeeFramework上手,Bee框架算是很好的MVC模式學習框架了。XML UI + Signal的View構建方式也挺優秀的。不過可惜的是現在Bee已經不再維護了,所以就拿來學習吧。
    1.MVC
    2.代理模式
    3.單例
    4.觀察者
    5.工廠模式

    單元測試:
    1.單元測試基礎原理
    2.XCTest


    開發技術之外的還包括:
    1.項目版本管理:SVN、Git
    2.項目包依賴管理:CocoaPods
    3.調試各種小技巧。比如斷點(條件、全局)、lldb調試基本指令、NSZombieEnabled、
    4.一些基本概念的理解,比如進程、線程、同步、非同步、隊列、串列、並發。

    中級階段。

    在這個階段呢,我們應該更多關注性能和業務方面的優化。

    開發語言方面:
    1.Swift:Objective-C與Swift互調。
    2.JavaScript:使用Objective-C執行JavaScript。可以多熟悉了解JavaScriptCore。三方框架方面推薦WebViewjavaScriptBridge。
    3.C、C++、Objective-C混編。

    iOS方面:
    1.動畫上熟悉CAAnimation(CABasicAnimation、CAKeyFrameAnimation、CAAnimationgroupCATransition)、UIDynamics(UIDynamicAnimator、UIDynamicBehavior)
    2.Runtime:objc_msgSend、Method Swizzling;
    3.正則表達式:NSpredicate、NSRegularExpression。
    4.消息推送機制
    5.組件開發:創建Framework、打包靜態庫
    6.分清32位和64位編譯區別,能夠將32位程序遷移到64位(這部分,,,,不強求)。

    多媒體:
    VLC組件使用頻率較高,但其中部分不需要的解碼庫可以適當的剝除以降低庫大小,SDWebImage可以細緻的去研究他的載入策略緩存策略。CoreAudio、COreGraphics能夠調度硬體進行編解碼,提升效率多半是Android一時半會達不到的。

    1.視頻:MediaPlayer、VLCPlayer
    2.圖片:CoreGraphics、SDWebImage
    3.音頻:CoreAudio

    網路交互:
    1.NSStream
    2.CFNetwork
    3.NSURLconnection
    4.NSURLSession
    5.Json解析(model數據接收導致崩潰,多半在Json解析。)

    架構設計:
    1.設計模式熟悉MVVM等不同的分層模式
    2.UML能夠繪製和讀懂常用模型圖吧,可能科班出身的基本都問題不大。

    應用測試:
    還在為應用莫名其妙卡殼而苦惱嗎,還在為找不到項目優化點而被產品同批嗎?Instrument——你值得擁有。
    1.性能測試:instrument(Timer、Allocation、Leak)

    開發環境與工程框架(個人覺得也是中後期關注比較多的點)


    在開發環境與工程穩定方面,顯然有這樣的需求你也不是一隻小菜鳥了。此時你對自己的項目有更高的追求了。
    那麼此時我們應該注意什麼樣的知識點呢?這部分整理,也是基於我司內部推行的一種Docker思想的整體企業級架構平台。平台集成了代碼倉庫、應用組建庫、自動組件化應用打包。當時也去聽了高煥堂老先生關於Docker思想的技術沙龍,感覺受益匪淺。真的開始融入到Docker思想後確實覺得有助於企業優化架構,並且我也完成了手頭一個應用從傳統架構到這種Docker架構的遷移,大概思路就是先將應用從業務上解耦,後進行組件化封裝。通過Cocoapods的podspec進行本地組裝,在傳至平台組件倉庫中打包供應用組裝時使用。這個過程中用到了Git、Cocoapods、Jenkins的部分知識,因此多了一份工程框架方面的思考哈。


    工程框架


    1.包依賴管理:Cocoapods、SwiftPackageManager、Carthage。如果你為了添加一個依賴庫,還在手動從Git上面下載,那麼就該注意去使用這些包管理工具了。提高效率很多,並且方便團隊開發時,快速構建項目框架。
    2.持續集成:Jenkins。首先,你先發現了自己在開發過程中對於持續集成的需求,並且發現真的很累...那麼此時你就該認真的思考如何通過工具完成這一煩躁的工作了。
    3.數據安全:
    3.1數據加密:Hash(MD5、SHA1、SHA265)、RSA、AES、3DES、Base63.
    3.2HTTPS與SSL:做開發,必須要學會跳過HTTPS授權,iOS也不例外。
    4.打包工具:Command Line Tools、xctool

    開發環境

    1.Xcode插件:Alcatraz(不說別的,那個會炸開打字效果就值得你一試)、VVDocument、KSImageNamed
    2.git:SourceTree
    3.SVN:Versions、Cornerstone。(講真Versions比Cornerstone好用。)
    4.開發者賬號申請和管理:
    4.1Apple Developer MemberCenter :證書(發布證書、開發證書、推送證書)、設備管理、配置文件管理
    4.2iTurnes Connect:Appstore應用管理、應用上架審核檢測、加急審核。
    5.熱門技術:
    5.1支付:微信支付、支付寶支付
    5.2社會化分享:微博、微信朋友圈等(此處推薦使用三方庫:UMengSocial)
    5.3即時通訊:XMPP、VoIP(不知道放這裡合不合適哈,做過視頻會議,網路電話的人都懂。)
    5.4HTML5:雖然我很忠實於原生應用開發,但是H5確實有點可取之處的(舉個栗子吧,你做數據圖表UI顯示時,還是H5給你提供的庫最多!),大家不妨關注下Hybrid App。

    以上列出的大部分內容來自於日常開發,還有書本閱讀 。


    首先聲明,回答不求全面,只介紹下自己的經驗。
    本人情況,正規大學計算機專業畢業,有語言基礎和計算機理論基礎。僅僅是基礎。
    2014年6月份畢業,工作三個月後辭職開始自學ios。選擇ios的原因有幾點:
    1.手頭有台mac,不用額外購買電腦。
    2.ios平台看起來比較漂亮,同時機型較少,好適配。
    3.行業薪資ios比安卓要高一些。
    4.開發語言是oc,有c語言基礎比較好學。
    個人感覺電腦只要是mac,什麼型號並不重要,因為前期的代碼量和程序規模並不需要強大的性能,所以儘管買最便宜的就好,不要被mac比較高的價格為難。上班後公司一般都有pro使用。另外蘋果手機也不是必須,模擬器足夠用,賬號也不是必須,資金拮据可以考慮省下這部分錢。
    入門先從最基礎的oc語法學起,可以買一本oc教材,然後下載網上的oc課程視頻,邊看邊敲,不懂得查書,不要只看書,我們不是為了應付考試。這樣一遍下來,對oc語法應該了解差不多了。這時不求全部理解,大部分概念有就可以,實際用到的時候不懂可以回來查,更可以加深理解。這個階段一到兩個月。
    有了語言基礎,可以進一步接觸cocoaTouch框架,做一些簡單的界面,很有成就感,可以激勵自己學習。這時同樣可以看網上教學視頻的進階版,一般是把大部分控制項的使用講一遍,然後仿照比較流行的app學習混合使用。這其中會穿插一些coreFoundation的知識,都是這個系統最基礎的東西。這個階段兩個月左右。
    再進階學習網路部分以及動畫第三方等等,其實有前面兩部分的基礎就可以去工作了,因為最基礎的東西學完,別的進階的可以隨用隨學。我目前還處在第三階段,還有很多不懂的,不過不影響工作,工作也是學習的過程,同時能接觸到更多自學過程中接觸不到的內容,比如很多成熟的第三方框架,比如app架構等等。這個階段兩個月到不知道多久。
    總得來說,對於沒接觸過的大部分人來說,從入門到可以去參加工作,需要5到7個月的時間,基礎好學的快的三四個月,一般培訓班是4個月時間,培訓費用加生活支出應該要兩萬大幾。自學如果沒有電腦支出的話,費用大概1萬。
    還有關於學習資料,首選國內的熱門教材,不要讀英文資料。我英語很好,但是非要看文檔的話,也是頭大,會讓自己失去興趣。可以用教材和閱讀博客結合的方式學習內容,學的東西一定要用,否則沒有任何意義。等入門了懂原理了,再去學習的時候,再去考慮文檔和英文資料,這些資料還是很有價值的。
    總之,不要好高騖遠,踏踏實實按計劃來。不求所有東西都吃透,但是至少保證能用學的知識做出東西來,並能解決發現的問題。這樣不斷的工作學習,經驗多了,了解的東西多了,慢慢就會成為初學者眼中的大神。
    這個行業薪資水平還可以,我現在所在的杭州,一年工作經驗大概在10k,兩到三年熟練的15到20k,四五年經驗能帶項目的20到40都有,所以薪資還是很誘人的,第一次感覺到時間就是金錢。想想這樣學下去,一年之後每個月能比現在多掙1萬,動力是不是多了點呢?


    貌似可以不用學內存管理了


    入門教程很多了,隨便找本看就行。再就是多看官方文檔,Github上的源碼。最重要的是練習,其他都是輔助


    樓上的各位大神,已經從技術層面說得足夠多得了,我來說點虛得把。

    說白了,就是一個學習方法的問題,這點不只iOS,其實任何編程都是一樣得。

    很多人學編程主要就看書,看視頻,甚至跟著視頻開發,但也覺得沒用。 為什麼? 因為在這個過程中並沒有真正動腦,所以這其中得知識點也很容易過目就忘。

    這個邏輯,在背單詞上也有運用,同樣都是看單詞:
    1. 看一眼英文,想一下是啥意思,想不起來,再去看中文。
    2. 看一眼英文,看一眼中文

    重複看幾遍,1和2效果相差巨大。 按1看三遍,你基本就記住了。按2看三遍,你還是啥都記不住,連一點印象都沒有。


    所以這個階段,
    其實你去看任何書,看任何視頻,都是沒用得。
    跟著書,跟著視頻敲代碼,作用都是很小得。

    怎麼辦?其實很簡單,和上面背單詞得例子一樣。

    你把你看書看視頻想要學習得知識點,列一個表,然後你YY一個App,App得功能能夠儘可能多得覆蓋到你得想要學習得知識點。

    然後建新工程,開始寫。遇到不懂不會的先思考,想不出來再去查書查視頻,不要隨便問,不要做伸手黨,因為你得到知識得過程越容易,這個知識就越不屬於你

    你會說, 我剛開始學耶,怎麼可能就獨立做App。

    你錯了。

    這是很多人最都犯得錯誤,我覺得最核心得還是中國得計算機教育得方法不對。為什麼很多人都會認為「獨立做個App」很難? 是因為他們潛意識裡,學習編程得過程是這樣得:

    1. 學習A-&>學習B-&>學習C-&>............................學完了!
    2. 我要開始做項目了,這個時候發現不管看啥東西,好像都挺難做得,而且似乎自己學過得東西,也沒什麼印象了,函數也不記得怎麼用。

    簡單的講:逐一學習了每一塊積木的形狀與用法,然後別人給你一座城堡,你去思考如何造個一樣得出來。(思維是逆向的,解題式的,過程是漫長的,成就感是沒有的,挫敗感是一直有的)

    那有沒有更有效得方法呢? 我覺得是有得。
    分享一下我中學學VB的過程
    1. 拿到譚浩強老師的書,翻了兩頁,學會了InputBox(彈出一個輸入框,接受用戶得輸入,函數得返回值就是用戶輸入得字元串), 以及MsgBox(彈出消息框)得用法

    2 靈機一動,貌似能做點東西了。
    (當時很流行一種網頁,你進入後會不斷彈框,問你得好朋友名字,你的名字,你暗戀的女生名字,最後生成一篇有意思得文章)


    3. 沒錯我就山寨了一個這種應用得Windows Form版出來。其實就靠這兩個函數。這就是我第一個「獨立App」

    4. 之後又想到,誒既然能接受用戶輸入,豈不是就能做計算器了?於是為了實現計算器,又間接學會了基本得數學庫,textbox, button等控制項得用法

    這種方法,簡單的講:學習了一些積木得用法,就嘗試用這些能搭出不同得東西,在這個過程中逐漸學會了其他積木得用法,然後再嘗試搭出更厲害的東西,以此循環。(思維是正向的,創造性的,過程是短暫的(拆解成了不同的階段),成就感是一直有的,挫敗感是暫時的)


    總結一下:

    • 編程本質是創造,創造本身是令人愉悅的,所以其實找對方法,學編程是一件很快樂的事,這一點比其他行業好很多,比如你學再難得編程,都比考CPA要爽。
    • 興趣是最好得老師
    • 勤造輪子

    /*****************************************************2015.02.22 更新***********************************************/
    因為這個問題很多人來問我iOS具體的學習路徑或者培訓班的情況。我在回答過一些同學的問題後,意識到你們最終目的是想學會iOS然後找到一份工作。而培訓班或者自學都是一個比較漫長的過程,至少3個月以上,而且還會付出很多金錢和自己的時間,甚至中斷一段時間自己的正常生活節奏,承擔的風險也太大,而像我這樣的經歷,我現在回想起來也覺得不是值得借鑒的,至少對於單純想靠iOS學習找到一份工作的同學來說,我覺得最多當個參考,有個具體的認識就好。
    今天回答一個同學關於培訓的問題的時候,突然想到我轉行後找到的第一家公司,同樣有個和我一樣轉行的同事,之前在一個小城市當老師,半年後果斷辭職,來成都用了兩周時間面試並被錄用,之後在公司先看一個月iOS開發的書,然後跟著別人做項目,最開始寫最簡單的界面,三個月時間就算iOS開發入門了。2014年三月份去了深圳,現在也在一家比較好的公司。
    所以不管自學也好,培訓也好最終目的都是要去公司上班做項目,而且培訓和自學出來同樣需要到公司去經歷項目才能算真正成為iOS初級開發者。很多時候我們做選擇的時候以終為始該怎麼選就很清楚了。我同事的方法就直接省去了自學和培訓的時間,也不用脫產,這是我現在想到的最快速和具備可操作性的方法了。
    但是這樣也需要前提:
    1.他之前C語言基礎比較好,面試的時候C語言的筆試題全對,所以老闆才要的他,所以你本身就要有一定的計算機理論基礎和編程基礎。
    2.有的公司,比如我之前那家外包公司會專門找還沒畢業的相關專業實習生,一般一個月時間就可以上手跟項目了,但是工資不會高,也不會轉正,但是只是攢技能點去的話,努力學幾個月等到自己技能點攢足了走就行了。他想要廉價勞動力,我們想要技能點,也不虧。但是這種公司我當然非常不建議去,因為學到最基本的東西後剩下都是重複的體力勞動,非常辛苦不說還對個人成長不好。只是作為轉行來說算是一個選擇。
    3.自己想要在三個月內就完成iOS語法學習到能參加項目,需要個人非常努力。
    這三點具備我覺得這條路才可行,希望有同學看到後能帶來一點啟發和不同的視角。
    /*****************************************************2015.02.22 更新***********************************************/

    我是一名iOS開發者,自己從零完全跨行自學iOS開發。已經做了很多項目,現在呆的公司馬上獨立完成第二個項目了,算一個中級iOS開發者了吧。現在的待遇在同樣工作經驗的人中算中上的了,我為什麼說這麼多呢?因為這個問題其實光一篇文章真的能起到的作用很少,我非常明白剛開始學的時候那種無頭蒼蠅一樣的無力感,我現在在成都,周末一般都有空,所以可以當面聊一聊,問問你具體情況給出一些學習路徑建議和一個對iOS技術大體全面的視角。因為我當初自學時也受過很多人的幫助和鼓勵,所以沒有任何回報要求。


    我覺得 學會一個東西最快的方式是邊學邊干 花幾個月做一個小app 就學會了


    我一直相信實踐是檢驗真理的唯一標準,同樣適用於iOS開發。
    我曾經看書看了兩個月的安卓開發入門書籍,敲代碼,實踐,找問題解決問題,結果當我進入項目時發現竟然不知所措。
    然後我轉入了iOS開發組,我沒有花幾個月時間去看書事實上也沒這個時間,而是直面問題,從做一個點擊放大查看圖片的小功能,用了一周時間反覆試驗修改,到最後一個月獨立完成一個APP,我覺得直面問題才是成長最快的途徑,或許這有些唐突或者操之過急,但是事實就是這樣。
    我也曾學習過設計模式,看過內存管理,但是,剛開始編程時我們根本不會在乎這些破玩意兒,只有當你完整的設計整個工程時你才會認真審視,採用何種設計模式會優化工程,如何內存管理才能提高程序效率。
    就醬紫,任性。


    感謝這裡的所有答案。
    我原來一直以為寫ios是一件十分麻煩的事情,畢竟oc是一個新的語言,而且一直以來我做的都是PC上的應用,這個轉變有點大。
    幾天前看到了各位的答案,突然信心倍增,遂拿出已經買了兩年的mac機跟著視頻教程一行行敲著代碼。熟悉了各種控制項和語法,順便跟著做了4個小項目,哈哈,兩天時間而已,自以為已經入門啦!相比vc,xcode實在是太強大了太易用了。
    原來很多東西並沒有想像中的困難,只是我們總在潛意識裡排斥著新事物吧。就如小馬過河的故事,不去涉足便不知水之深淺。


    iOS入門當然要先從C語言、Object—C語言學起了。一般來說,iOS的學習要經過三個階段:

    一、C語言階段

    C語言和Object—C語言的知識框架圖如下圖所示。目前iOS開發分為OC學習路線和swift學習路線,個人建議還是從最經典的OC學起,現在承認swift的公司還是太少了。

    二、UI控制項學習階段

    C語言學完後,相當於iOS開發的內功修鍊好了,下面就開始正式進入iOS開發的學習階段。iOS開發初級可以先從UI控制項學起,UI控制項這部分相對於其他部分來說,學起來相對簡單,這部分的學習會涉及到經常做一些酷炫的效果,學起來也賞心悅目。UI控制項涉及到的知識點如下圖所示:

    :這一階段學完你基本就可以做出來你人生中第一個APP了。當然,這個APP也只能是個很簡單的APP,很多功能沒法實現,比如說分享功能、視頻播放功能、支付功能以及最近比較火的直播。要想實現這些功能必須要經過高級階段的學習才可以。

    三、 iOS開發高編階段

    iOS高級階段的學習,這一部分的學習包括數據存儲,網路編程,多媒體等方面的重要知識。這一階段的學習內容比較雜,也相對比較有難度。初級階段的一些代碼,小白甚至都可以看懂,但是高級階段的代碼,如果不具備一定的編程基礎,是完全看不懂的。這一階段學完。你基本就可以給自己的APP加各種功能了,也可以做成一個功能相對完善的APP了。高級階段的學習涉及到的知識點如下圖:

    註:到這一階段,iOS開發的相關知識都已經學完了。你已經具備了開發一個APP所應該具備的所有知識。剩下的就是項目實戰的問題了。

    iOS開發需要學的東西多嗎?其實也就是這麼一點東西。並不多。

    iOS開發難學嗎?這個也是因人而異,東西就是這麼多東西,一個智力正常的人經過四個月的學習都會學的差不多。

    寫代碼寫到最後,每個人的知識儲備其實都差不多,一個優秀的iOS開發者和一個普通的iOS開發者說到底還是差在了形而上的編程思維方面。這個等你走上iOS開發崗位上,自然會體會得到。

    最後,完全零基礎的小白想系統地學習iOS開發,推薦我贏職場的iOS開發教程,一款很經典的教程:

    我贏職場iOS開發工程師教程


    1?別人學1個月就能做APP,你也許10年都看不完一本入門書。
    2?別人拿30K一個月,你可能3K都沒人要。
    3?能買Mac,就買預算內最貴的。
    4?不要自己折騰配件。
    5?配件升級順序:內存(8G起步) -&> 存儲(SSD 256G起步) -&> CPU -&> 顯卡
    6?買不了Mac,就自己黑一個:VM10裝Mac OS X 10.9.3及更新到Mac OS X 10.10
    7、趕緊買書看書看視頻:斯坦福大學公開課:iOS 7應用開發
    8、有任何學習上、工作上的問題,都可以問。但不要在線等別人答,趕緊自己去搜索。
    9?能用Google就用Google,不行就百度。不要只搜一次,閱讀了解部分信息後,增加或修改關鍵詞繼續搜。
    10?多用專業網站的站內搜索,或者Google/百度時加」site:」。
    11?實時請教是最低效的,多看書多看博客多看問答社區多搜索。
    12?多參加技術沙龍,熟悉自己謀生的技術圈子。以防萬一,帶本書出門。


    我就是學的 Stanford CS193 iOS7開發。
    那個老爺子講得特別好!激情負責任!
    而且講義實在是太用心了!簡直是手把手!

    至於更詳細的你直接看排名第一的那個答案吧,我其實是紅領巾。

    iOS7_免費高速下載

    這是我千辛萬苦搜集到的資料,視頻有英文字幕!!!!
    (在百度雲上面預覽是看不到字幕的 :( 可能是視頻格式的原因 下載下來就可以看到英文字幕了。 )

    =====
    不夠我沒看到樓主強調設計模式、內存管理。。我以為就是入門 : (


    推薦閱讀:

    Swift 為什麼沒有異常處理?

    TAG:iOS 開發 | Objective-C | iOS 開發入門 | Swift 語言 |