java(android)和oc(ios)比較

1. Cocoa是什麼?Cocoa是使用OC語言編寫的工具包,裏面有大量的類庫、結構體,說白了其實就相當於java中的標準API、C++中的標準庫。OC中沒有命名空間的概念,所以使用加前綴來防止命名衝突,因此你會看到大量的以NS 爲前綴的類名、結構體、枚舉 

2. Cocoa框架由Foundation Kit、App Kit兩部分組成,前者是基礎工具庫,後者主要是UI庫、高級對象等。iOS和安卓都可以使用第三方類庫.a,.framework,.so...

3. static  類變量只能本類訪問,除非提供類方法給外部訪問這個類變量。

4. OC中只有類的成員變量纔有訪問權限控制 ,@public、@protected、@private,默認是@protected,類變量、類方法、成員方法是沒有訪問修飾符的,  所有的方法都是public的,所有的類變量都是私有的。

java:static:修飾變量,稱爲類變量或靜態變量。靜態變量是和類存在一起的,每個實例共享這個靜態變量,在類加載時初始化。

final:被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取不能更改。修飾類是不能派生出子類,修飾方法時,不能被當前子類的方法覆蓋。

abstract:不能創建abstract 類的實例。一般被繼承,實現抽象方法。類只要有一個abstract方法,類就必須定義爲abstract,但abstract類不一定非要保護abstract方法不可。

5. android static方法(ios的+方法)

    static方法可以直接通過類名調用,任何的實例也都可以調用,因此static方法中不能用this和super關鍵字,不能直接訪問所屬類的實例變量和實例方法(就是不帶static的成員變量和成員成員方法),只能訪問所屬類的靜態成員變量和成員方法。因爲static方法獨立於任何實例,因此static方法必須被實現,而不能是抽象的abstract。
    static方法只能訪問static的變量和方法,因爲非static的變量和方法是需要創建一個對象才能訪問的,而static的變量/方法不需要創建任何對象。
6. OC中定義類的  @interface 和java中的interface不是一回事,OC的@protocol和java中的interface纔是一碼事。@interface跟java和C++ class關鍵字差不多,在OC和C++中,都習慣將類定義寫在頭文件裏,而java卻根本沒有頭文件的概念,
7. oc的通知(notice)與android的廣播,都是可以一對多的方式響應,安卓可以多個程序之間通訊
8.oc的運行時和android的反射,都可以實現的功能:獲取類信息、屬性設置獲取、類的動態加載(NSClassFromString(@“className”))、方法的動態調用
9.OC中使用nil表示null ,但跟java中的null還是有區別的,java中調用null的方法,會報臭名昭著的空指針異常,而OC不會,所以在OC你不必再爲空指針而煩惱。
10.Cocoa中提供的很多函數和java中的api有很大的不一樣,  java是純面向對象的,所有的方法都必須在類中定義,但OC是兼容C語言的,所以C中的面向過程思想在OC中也是行得通的,因此Cocoa中很多東西都不是對象,而是C語言的函數、結構體,比如NSLog()
11.Objective-C的異常都繼承自NSException,當然NSException 本身也繼承自NSObject。總體來說,OC中的異常體系和java中的異常體系差不多,唯一的差別就是java中有業務異常,意思就是說你必須捕獲他,如果不捕獲就會出現編譯錯誤,  OC中的異常基本上都屬於java中的運行時異常 ,如果你沒有捕獲,發生了異常程序就會崩潰,在一些循環批任務中尤其要注意
12.OC中還有一個特色那就是他的  弱類型id,他可以表示任何對象 ,實際上應該是利用了指針地址的通用性,由於OC中操作對象都必須是指針,而指針本身又是一串地址,所以通過指針可以指向一切不同的對象。
13.oc的block就是java中匿名內部類,而匿名內部類的好處是代碼更清晰
14.oc的字典和數組對應android的map和list
15.oc的NSCoding對應android的Serializable,序列化
16.多線程,@synchronized,runable,handle,postmessage,performselectoronmainthread,待續.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章