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