2016-04-01 11:53:01 1321瀏覽
移動端已經(jīng)超越PC端成為了主導(dǎo)互聯(lián)網(wǎng)發(fā)展態(tài)勢的風(fēng)向標(biāo),而作為移動終端市場的風(fēng)頭蘋果系統(tǒng)iOS也從幕后走到臺前,扣丁學(xué)堂作為北京千鋒互聯(lián)科技有限公司旗下的在線教育平臺,通過線上線下相結(jié)合的形式,全方位的服務(wù)學(xué)員??鄱W(xué)堂ios開發(fā)Objective—C教程由業(yè)內(nèi)頂級iOS講師歷時多年精心制作,能夠讓0基礎(chǔ)學(xué)員迅速成為iOS開發(fā)高級軟件開發(fā)工程師,其中包括對象歸檔 Selector等。
Objective-C通過一套全新語法,在c語言基礎(chǔ)上添加了面向?qū)ο筇匦?。Objective-C的語法中頻繁使用方括號,而且不吝于寫出極長的方法名,這通常令許多人覺得此語言較為冗長。其實(shí)這樣寫出來的代碼十分易讀,只是c++或Java程序員不太能適應(yīng)。
0bjective-C語言學(xué)起來很快,但有很多微妙細(xì)節(jié)需注意,而且還有許多容易為人所忽視的特性。另一方面,有些iOS開發(fā)者并未完全理解或是容易濫用某些特性,導(dǎo)致寫出來的iOS應(yīng)用項(xiàng)目源碼難于維護(hù)且不易調(diào)試。
Objective-C與c++、Java等面向?qū)ο笳Z言類似,不過很多方面有所差別。若是用過另一種面向?qū)ο笳Z言,那么就能理解Objective-C所用的許多范式與模板了。然而語法上也許會顯得陌生,因?yàn)樵撜Z言使用“消息結(jié)構(gòu)”(messaging structure)而非“函數(shù)調(diào)用”(functioncalling)。Objective-C語言由Smalltalk@演化而來,后者是消息型語言的鼻祖。消息與函數(shù)調(diào)用之間的區(qū)別看上去就像這樣:關(guān)鍵區(qū)別在于:使用消息結(jié)構(gòu)的語言,其運(yùn)行時所應(yīng)執(zhí)行的代碼由運(yùn)行環(huán)境來決定;而使用函數(shù)調(diào)用的語言,則由編譯器決定。如果范例代碼中調(diào)用的函數(shù)是多態(tài)的,那么在運(yùn)行時就要按照“虛方法表”(virtual table)e來查出到底應(yīng)該執(zhí)行哪個函數(shù)實(shí)現(xiàn)。而采用消息結(jié)構(gòu)的語言,不論是否多態(tài),總是在運(yùn)行時才會去查找所要執(zhí)行的方法。實(shí)際上,編譯器甚至不關(guān)心接收消息的對象是何種類型。接收消息的對象問題也要在運(yùn)行時處理,其過程叫做“動態(tài)綁定”(dynamic binding)。
Objective—C的重要工作都由“運(yùn)行期組件”(runtime component)而非編譯器來完成。使用Objective—C的面向?qū)ο筇匦运璧娜繑?shù)據(jù)結(jié)構(gòu)及函數(shù)都在運(yùn)行期組件里面。舉例來說,運(yùn)行期組件中含有全部內(nèi)存管理方法。運(yùn)行期組件本質(zhì)上就是一種與開發(fā)者所編代碼相鏈接的“動態(tài)庫”(dynamic library),其代碼能把開發(fā)者編寫的所有程序粘合起來。這樣的話,只需更新運(yùn)行期組件,即可提升應(yīng)用程序性能。而那種許多工作都在“編譯期”(compile time)完成的語言,若想獲得類似的性能提升,則要重新編譯應(yīng)用程序代碼。
Objective-C是C的“超集”(superset),所以c語言中的所有功能在編寫Objective.C代碼時依然適用。因此,必須同時掌握c與objective.C這兩門語言的核心概念,方能寫出高效的0bjective-C代碼來。其中尤為重要的是要理解c語言的內(nèi)存模型(memory model),這有助于理解Objective—C的內(nèi)存模型及其“引用計(jì)數(shù)”(reference counting)機(jī)制的工作原理。若要理解內(nèi)存模型,則需明白:Objective-C語言中的指針是用來指示對象的。想要聲明一個變量,令其指代某個對象,可用如下語法:
這種語法基本上是照搬C語言的,它聲明了一個名為someString的變量,其類型是NSString*。也就是說,此變量為指向NSString的指針。所有Objective·C語言的對象都必須這樣聲明,因?yàn)閷ο笏純?nèi)存總是分配在“堆空間”(heap space)中,而絕不會分配在“棧”(stack)上。不能在棧中分配Objective—C對象:查看更多關(guān)于“ios培訓(xùn)資訊”的相關(guān)文章>>