OC語言優(yōu)點(diǎn):
1.Category是非常實(shí)用的擴(kuò)展機(jī)制,可以很方便的為一個已有的類添加屬性或者方法,而不需要笨拙的去繼承。
2.運(yùn)行時多態(tài)的概念,可以讓一個類的對象動態(tài)的以其他類行為去執(zhí)行(OC中多了很多運(yùn)行時態(tài)的機(jī)制,其中id的特殊用途,可以通過id類型的變量,調(diào)用不同類的同名函數(shù),即使這些類沒有任何關(guān)系)。
3.ARC不用多講了吧
4.OC中類沒有所謂的構(gòu)造函數(shù)和析構(gòu)函數(shù),所以如果一個類中有其他類的數(shù)據(jù)(動態(tài)申請的),那么釋放內(nèi)存就不能依賴析構(gòu)函數(shù),但可以采用重寫-(id) free來實(shí)現(xiàn)類中所有數(shù)據(jù)釋放。
5.OC中成員變量也有三種訪問權(quán)限,@public,@protected,@private。但默認(rèn)的是@protected,而C++中默認(rèn)是private。
6.OC中成員函數(shù)只有兩種,一種是實(shí)例函數(shù),一種是類函數(shù)。實(shí)例函數(shù)就是C++中的Public函數(shù),類函數(shù)就是public中的static函數(shù)。
7.OC中成員函數(shù)如果要接受多個參數(shù),則需要每個參數(shù)前加冒號(雖然教科書上說參數(shù)后加冒號,但就我看來說成參數(shù)前加更能讓C++Programmer理解)。例如-( int ) Set : ( int ) A : ( int ) B ;每個形參前還可以加一個參數(shù)名,并成為函數(shù)名的一部分。例如-( int ) Set : ( int ) A And : ( int ) B;在使用時[ classTest Set : 10 And : 12 ]; 起初看起來確實(shí)不習(xí)慣。。。
8.OC中還多了一個id類型,通過測試,id就是指針。
9.OC不是一個過度復(fù)雜的 C 衍生語言。
10.OC可以給已類添加新的函數(shù)。@interface classExist( NewMethodGroup )-@end,@implementation classExist( NewMethodGroup )-@end。
11.OC可以將讓某類A,代替某類B。通過poseAs關(guān)鍵字。例如:[FractionB poseAs: [Fraction class]];此后使用Fraction類時,就轉(zhuǎn)換成使用FractionB了
12.OC還有protocol概念。protocol實(shí)際是一組函數(shù),支持改協(xié)議的類都應(yīng)重寫這些函數(shù)。通過@protocol-@end來聲明protocol。類中通過《protocol1,protocol2,。。?!穪肀硎局С帜硞€協(xié)議。如@interface A : Object 《 NSCopying, NSTransform 》-@end表明類A繼承與Object類,并支持兩個協(xié)議(NSCopying, NSTransform )。
13.OC最后總結(jié),其類實(shí)現(xiàn)以c為基礎(chǔ)。@interface classTest - @end是相當(dāng)于一組宏,幫你將類的所有成員變量聲明組織為一個結(jié)構(gòu)體,成員函數(shù)實(shí)際就是普通函數(shù),是在原來成員函數(shù)基礎(chǔ)上,修改函數(shù)名稱,添加結(jié)構(gòu)體指針到第一個參數(shù)。id類型實(shí)際也就是指針。難怪OC的類看起來不像C的一般語法,原因就是其源自C的一般語法,采用新的類腳本的方式,實(shí)現(xiàn)的類功能。
14.由于都是C衍生出的面向?qū)ο蟮恼Z言 所以可以和C++混合編碼。(百度地圖API 就用到了)
OC語言的缺點(diǎn):
1.不支持多重繼承 只有多級繼承。
2.使用動態(tài)運(yùn)行時類型,所有的方法都是函數(shù)調(diào)用,所以很多編譯時優(yōu)化方法都用不到。(如內(nèi)聯(lián)函數(shù)等),性能低劣。
3.不支持運(yùn)算符重載(“命名空間”,也稱“名稱空間” 。VS.NET中的各種語言使用的一種代碼組織的形式 通過名稱空間來分類,區(qū)別不同的代碼功能 同時也是VS.NET中所有類的完全名稱的一部分。因?yàn)槿祟惪捎玫膯卧~數(shù)太少,并且不同的人寫的程序不可能所有的變量都沒有重名現(xiàn)象,對于庫來說,這個問題尤其嚴(yán)重,如果兩個人寫的庫文件中出現(xiàn)同名的變量或函數(shù)(不可避免),使用起來就有問題了,為了解決這個問題,引入了名字空間這個概念,通過使用 namespace xxx;你所使用的庫函數(shù)或變量就是在該名字空間中定義的,這樣一來就不會引起不必要的沖突了。)
4.程序執(zhí)行效率:匯編》C》OC
評論
查看更多