oc語言最大的優(yōu)點和不足是什么?對于不足,有沒有可用的方法來繞過這些不足來實現(xiàn)需求。
一、oc語言的特性
OC做為一門面向?qū)ο笳Z言,具有面向?qū)ο蟮恼Z言特性,如封裝、繼承、多態(tài)。他具有靜態(tài)語言的特性(如C++),又有動態(tài)語言的效率(動態(tài)綁定、動態(tài)加載等)。
OC的動態(tài)特性表現(xiàn)為了三個方面:動態(tài)類型、動態(tài)綁定、動態(tài)加載。之所以叫做動態(tài),是因為必須到運行時(run time)才會做一些事情。
(1)動態(tài)類型
動態(tài)類型,說簡單點就是id類型。動態(tài)類型是跟靜態(tài)類型相對的。像內(nèi)置的明確的基本類型都屬于靜態(tài)類型(int、NSString等)。靜態(tài)類型在編譯的時候就能被識別出來。所以,若程序發(fā)生了類型不對應(yīng),編譯器就會發(fā)出警告。而動態(tài)類型就編譯器編譯的時候是不能被識別的,要等到運行時(run time),即程序運行的時候才會根據(jù)語境來識別。所以這里面就有兩個概念要分清:編譯時跟運行時。基本的動態(tài)特性在常規(guī)的Cocoa開發(fā)中非常常用,特別是動態(tài)類型和動態(tài)綁定。由于Cocoa程序大量地使用Protocol-Delegate的 設(shè)計模式,因此絕大部分的delegate指針類型必須是id,以滿足運行時delegate的動態(tài)替
(2)動態(tài)綁定
動態(tài)綁定(dynamic binding),讓代碼在運行時判斷需要調(diào)用什么方法,而不是在編譯時。與其他面向?qū)ο笳Z言一樣,方法調(diào)用和代碼并沒有在編譯時連接在一起,而是在消息發(fā)送時才進行連接。運行時決定調(diào)用哪個方法。
(3)動態(tài)加載
根據(jù)需求加載所需要的資源,這點很容易理解,對于iOS開發(fā)來說,基本就是根據(jù)不同的機型做適配。最經(jīng)典的例子就是在Retina設(shè)備上加載@2x 的圖片,而在老一些的普通屏設(shè)備上加載原圖。隨著Retina iPad的推出,和之后可能的Retina Mac的出現(xiàn),這個特性相信會被越來越多地使用。
oc 語言的優(yōu)點:類目、動態(tài)識別、支持c語言、oc與c++可以混編
缺點:不支持命名空間、不支持運算符重載、不支持多重繼承
多態(tài)(Polymorphism)OC中的多態(tài)則是不同對象對同一消息的不同響應(yīng)方式,子類通過重寫父類的方法來改變同一消息的實現(xiàn),體現(xiàn)多態(tài)性。具體來說指的是允許父類的指針指向子類對象,成為一個更泛化、容納度更高的父類對象,這樣父對象就可以根據(jù)實際是哪種子類對象來調(diào)用父類同一個接口的不同子類實現(xiàn)。