自己目前大四汪一枚,自學(xué)iOS開(kāi)發(fā)一年左右,先后學(xué)習(xí)了swift和Objective-C姑宽。由于是自學(xué)(而且全院貌似就我一個(gè)人在學(xué))遣耍,深知自學(xué)之痛。所以在此分享一下我的學(xué)習(xí)路程炮车,希望可以幫到大家舵变。
個(gè)人以為,從iOS開(kāi)發(fā)小白到iOS開(kāi)發(fā)高級(jí)工程師瘦穆,可以分成以下四個(gè)階段:
1.熟悉語(yǔ)言語(yǔ)法階段(小白)
iOS開(kāi)發(fā)主要有兩種語(yǔ)言:Objective-C和swift纪隙。建議先學(xué)Objective-C,因?yàn)槟壳皣?guó)內(nèi)80%~90%的公司都在用Objective扛或,因?yàn)楫a(chǎn)品迭代原因绵咱,最近一兩年還不會(huì)大量遷移到swift。暫且不提開(kāi)發(fā)效率熙兔,從就業(yè)角度來(lái)講悲伶,你也應(yīng)該現(xiàn)學(xué)Objective-C。當(dāng)然如果你學(xué)好了Objective-C住涉,再去學(xué)習(xí)swift也很好麸锉,為以后做打算。
學(xué)完一門(mén)編程語(yǔ)言語(yǔ)法舆声,你起碼應(yīng)該熟悉一下幾點(diǎn):
(1)語(yǔ)言的數(shù)據(jù)類(lèi)型有哪些花沉,怎么去定義。一般有整形媳握、字符型碱屁、布爾類(lèi)型等。
(2)語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)有哪些蛾找。一般有數(shù)組娩脾、字典、各種容器等打毛。
(3)語(yǔ)言的基礎(chǔ)語(yǔ)句晦雨。if-else架曹、switch-case、while闹瞧、for等绑雄。
(4)語(yǔ)言的面向?qū)ο筇匦裕ㄈ绻敲嫦驅(qū)ο笳Z(yǔ)言的話)。如何去構(gòu)建一個(gè)類(lèi)奥邮,去寫(xiě)一個(gè)方法万牺。類(lèi)或者變量的私有與公有等。
(5)語(yǔ)言的一些專(zhuān)屬特性洽腺。例如OC的block脚粟、delegate等。
學(xué)習(xí)完這門(mén)語(yǔ)言蘸朋,你起碼能夠做到能夠?qū)懸粋€(gè)完整的類(lèi)核无。可以對(duì)一個(gè)事物抽象藕坯,然后熟練寫(xiě)出這個(gè)類(lèi)的屬性团南、方法等。如果寫(xiě)這些還需要去翻書(shū)炼彪,那繼續(xù)看吧吐根。
2.熟悉語(yǔ)言API,iOS的基本開(kāi)發(fā)UI控件階段(菜鳥(niǎo))
一門(mén)語(yǔ)言有成百上千個(gè)API辐马,不需要你去都記住拷橘,但是要記住常用的。例如OC中的UITableView的dataSource和delegate喜爷;GCD或者NSOperation開(kāi)辟線程執(zhí)行任務(wù)的相關(guān)方法冗疮;NSDictionary、NSArray相關(guān)的增刪查改方法檩帐;JSON數(shù)組轉(zhuǎn)換方法术幔;文件操作方法等。一些常用操作的API需要熟練掌握轿塔。
對(duì)于UI控件特愿,常用的有UIView仲墨、UITableView勾缭、UIScrollView、UIButton目养、UILabel等俩由。你應(yīng)該熟悉這些控件的屬性和相關(guān)的操作方法。例如UITextField如何讓文字左對(duì)齊癌蚁,如何響應(yīng)輸入框的變化等幻梯。
還應(yīng)該熟悉響應(yīng)的Controller,例如UIViewController,UINavigationController等操作兜畸。知道UIViewController的生命周期。如何通過(guò)delegate在界面之間傳遞數(shù)據(jù)碘梢。NSNotification咬摇、Block、KVO煞躬、KVC肛鹏、Category等都是需要在這個(gè)階段掌握的。
這個(gè)階段結(jié)束后恩沛,你應(yīng)該能夠仿出一個(gè)類(lèi)似于網(wǎng)易新聞客戶端在扰、QQ等這種APP的界面模型。暫且不管先不說(shuō)流暢性和內(nèi)存雷客。
3.了解iOS開(kāi)發(fā)的底層原理芒珠,并熟練運(yùn)用(初級(jí)、中級(jí)工程師)
所謂的iOS基礎(chǔ)搅裙,面試也經(jīng)常問(wèn)到的:iOS內(nèi)存管理(ARC&MRC)皱卓、iOS運(yùn)行時(shí)機(jī)制(RunTime)、RunLoop呈宇、多線程(GCD&NSOperation)等好爬。這只是概括的說(shuō),每一塊都需要掌握的很詳細(xì)甥啄。
熟練使用類(lèi)庫(kù)并閱讀類(lèi)庫(kù)源碼存炮,例如AFNetWorking、SDWebImage等(這倆是初學(xué)者必看的)蜈漓。同時(shí)自己也嘗試造一些輪子穆桂。
這個(gè)階段基本就可以正式干活了,也就是說(shuō)能夠參與寫(xiě)一寫(xiě)企業(yè)級(jí)的項(xiàng)目了融虽。如果在這之前享完,會(huì)寫(xiě)出很多漏洞和bug。
4.能夠熟練寫(xiě)一些框架有额,并對(duì)iOS開(kāi)發(fā)有自己的真知灼見(jiàn)(高級(jí)工程師)
因?yàn)閭€(gè)人比較菜般又,對(duì)這個(gè)階段理解也比較淺。如果有什么錯(cuò)誤的地方巍佑,還請(qǐng)大神糾正茴迁。
在這個(gè)階段的人,基本都會(huì)寫(xiě)一個(gè)或者多個(gè)開(kāi)源類(lèi)庫(kù)萤衰,上傳github進(jìn)行維護(hù)堕义。同時(shí)在項(xiàng)目開(kāi)發(fā)中承擔(dān)一些核心工作,使用C對(duì)一些底層進(jìn)行封裝脆栋。而不是寫(xiě)一些界面布局倦卖,數(shù)據(jù)獲取處理等操作洒擦。而且在寫(xiě)博客時(shí),更加著重于如何去優(yōu)化性能怕膛、如何去創(chuàng)造新的東西熟嫩。更有甚者,可以晉升項(xiàng)目leader活著技術(shù)總監(jiān)等褐捻“钗#或者直接不給公司干了,當(dāng)一個(gè)自由職業(yè)者舍扰,或者直接去創(chuàng)業(yè)倦蚪。
可以說(shuō),處于這個(gè)階段的人边苹,更多的不是為了薪水陵且,而是對(duì)技術(shù)的熱愛(ài)。起碼我是這么認(rèn)為个束。
以上說(shuō)的是該學(xué)什么慕购,下面繼續(xù)說(shuō)說(shuō)如何去學(xué)。
1.基礎(chǔ)
如果你是一個(gè)非編程相關(guān)專(zhuān)業(yè)的人茬底,例如藝術(shù)專(zhuān)業(yè)想轉(zhuǎn)iOS開(kāi)發(fā)沪悲,建議你先去學(xué)C,C可以說(shuō)是編程界的《易筋經(jīng)》阱表,學(xué)好了C學(xué)其他語(yǔ)言會(huì)很容易上手殿如。如果你有了編程基礎(chǔ),那就直接去學(xué)OC和swift吧最爬。對(duì)于基礎(chǔ)語(yǔ)法涉馁,看書(shū)就能解決問(wèn)題。本人學(xué)習(xí)swift看的是《Swift Programming Language》爱致,學(xué)習(xí)Objective-C看的是《Objective-C編程全解》烤送。看書(shū)的時(shí)候邊看編敲糠悯,這樣會(huì)掌握牢固點(diǎn)(雖然我沒(méi)這么做)帮坚。如果你是對(duì)編程極度敏感的人,基本看一遍書(shū)就都解決了互艾。否則你要多看幾遍多敲點(diǎn)代碼了试和。
2.入門(mén)
如果你感覺(jué)學(xué)著吃力,建議你先從視頻看起忘朝,因?yàn)橐曨l講解的詳細(xì)易懂灰署,當(dāng)然看視頻進(jìn)度比較慢判帮。關(guān)于視頻局嘁,本人推薦加iOS交流裙(六八一五零三七一六)溉箕,邀請(qǐng)碼填【墨子】,裙里有8年開(kāi)發(fā)經(jīng)驗(yàn)的iOS老師解答問(wèn)題悦昵,而且有大量的學(xué)習(xí)視頻和資料共享肴茄。
這個(gè)階段要多寫(xiě)一些demo,最好寫(xiě)幾個(gè)完整的項(xiàng)目但指。例如寫(xiě)一個(gè)有關(guān)天氣的客戶端或者其他的寡痰。下面是我當(dāng)初學(xué)的時(shí)候?qū)懙模?/p>
3.進(jìn)階
要想進(jìn)入這個(gè)階段,可能要比前兩個(gè)階段困難點(diǎn)了棋凳。前兩個(gè)階段只是看拦坠,思考的東西并不多,基本看了就會(huì)剩岳,很多人都可以做到贞滨。物以稀為貴,越容易學(xué)會(huì)越不值錢(qián)拍棕。
看牛人的個(gè)人博客是很好的學(xué)習(xí)方式晓铆,很多牛人都會(huì)把知識(shí)的總結(jié)寫(xiě)成博客。這個(gè)大家可以自己去找找绰播,這里發(fā)鏈接不太合適骄噪。
寫(xiě)博客,只是看博客還不行蠢箩,還要自己寫(xiě)链蕊。寫(xiě)的好壞不要緊,重要是寫(xiě)不寫(xiě)谬泌。寫(xiě)博客過(guò)程中示弓,能夠讓你對(duì)知識(shí)理解的更加深刻。而且寫(xiě)一篇優(yōu)質(zhì)博客呵萨,你回去查閱很多資料奏属,在這個(gè)過(guò)程中,你能夠得到很大的提高潮峦。
造輪子囱皿,紙上得來(lái)終覺(jué)淺,絕知此事要躬行忱嘹。只是看和寫(xiě)還不行嘱腥,還要敲。先從小輪子寫(xiě)起拘悦,可以先看別人的代碼齿兔,再去寫(xiě)別人寫(xiě)過(guò)的。熟練了以后,寫(xiě)別人沒(méi)寫(xiě)過(guò)的分苇。日積月累添诉,你會(huì)對(duì)iOS編程理解越來(lái)越深。
寫(xiě)在最后
如果你只是想開(kāi)發(fā)著玩玩医寿,那么你按照以上學(xué)習(xí)就差不多了栏赴。但是如果你真想走編程這條不歸路,你最好還要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)靖秩、計(jì)算機(jī)網(wǎng)絡(luò)须眷、操作系統(tǒng)這些知識(shí),雖然這些東西在實(shí)際開(kāi)發(fā)中用到的很少沟突,但是如果不學(xué)這些基礎(chǔ)花颗,你在成長(zhǎng)過(guò)程中會(huì)遇到瓶頸。另外惠拭,搜索問(wèn)題的時(shí)候盡量用Google捎稚。多看看Apple官方文檔,多去StackOverflow問(wèn)答求橄,盡量熟悉閱讀英文的東西今野。國(guó)外有很多優(yōu)質(zhì)學(xué)習(xí)資源是沒(méi)有被譯成中文的。
師父領(lǐng)進(jìn)門(mén)罐农,挖坑靠個(gè)人条霜。愿大家在iOS挖坑的道路上越挖越深。涵亏。宰睡。如果有一天爬不出來(lái)了,希望不要來(lái)揍我气筋。