九個角度分析對比 Android、iOS開發區別
對於創業的人來講,選擇Android還是iOS是一個棘手的問題。有資料顯示Android 的市場份額突破80%。有不少人會覺得開發者在兩個平臺之間的選擇就更加容易,畢竟市場決定利潤。但事實上並非如此。今天從開發環境、配置、UX設計、語言、API、網路、分享、碎片化、釋出等九個方面把Android和iOS平臺做一次PK。
網路通訊實現
當今大多數應用都採用網際網路API,iOS和Android都提供了一整套工具和API幫助開發者實現這樣的功能,都提供了非常類似的WebView——基本上相當於一個瀏覽器視窗,開發者可以將其插入到應用程式的任何位置。
網路連線上都是在後臺執行的,一般不會阻塞應用的主執行緒,多執行緒難度比較大。Android提供了一個AsyncTask類來解決類似的問題,雖然有些冗長,但效果很好。Android另外還提供了一個簡單方法來判斷使用者是否線上。iOS也提供了差不多的東西,但相比之下有些低階,令人不是很滿意。
不過,也有一些開源庫能夠幫助開發者更好的實現iOS上的網路通訊功能,比如AFNetworking。不過這個在Android上實現不了,因為Java不支援程式碼塊。
結論:不考慮第三方庫的情況下,Android有優勢,而iOS在第三方庫上具有優勢。
分享
從應用中分享內容到社交網路上到底有多容易?原以為這是Android的一大利器,因為Android很早之前就有了一個功能強大的應用內通訊系統Intents。通常情況下,Android仍然能夠比較方便的實現應用之間的資料分享。
而在分享上,iOS已經基本追趕上Android了。這個大家可以自己判斷下,GitHub上有兩份有關分享Scanvine故事的原始碼:Android版、iOS版。iOS程式碼比較長一點,因為我在其中加了一些Google Analytics程式碼。
結論:旗鼓相當
開發環境
很多人會用純文字或者命令列寫程式碼,但利用一個整合開發環境或者IDE顯然更加有效率。
蘋果的開發環境是Xcode,具有執行速度快、功能強大且安全性高不易被入侵等特點。且隨著不斷完善優化,Xcode詭異的編譯機制以及強加給開發者的那些有關iOS應用程式對裝置控制權的複雜證照機制也逐漸被開發者所忽略。且Xcode的偵錯程式能夠無縫完美除錯Bug,模擬器的響應速度也非常快。
再來看看Android。目前最先進的IDE是利用Android外掛定製的Eclipse。執行緩慢、笨拙等缺點顯而易見,Android碎片化也帶來了不必要的複雜性。偵錯程式非常糙,大部分時間讓開發者自己在日誌檔案中除錯,而Xcode則提供了除錯工具。而模擬器,往往需要幾分鐘時間才能夠啟動,還常常會連線不上Android Debug Bridge。
谷歌也已經發現了問題,現在他們準備推出一個新的Android Studio IDE:
Android Studio目前為試用版本。仍有不少功能不完整或尚未實現,所以您可能會遇到一些未知的錯誤資訊。如果您不願意使用一個未完成的產品,您可以下載(或繼續)使用ADT Bundle(通過ADT外掛定製的Eclipse)。
能夠看到谷歌開始努力聽起來是不錯的,但不知道猴年馬月才能完整的實現。
結論:顯然,iOS勝出。
配置
正如前面寫到的,在Xcode與Objective-C的完美搭配之下,隱藏著令人恐怖的編譯機制。開發者需要面對巨集、標頭檔案、專案、計劃以及構建配置等一大串構建配置的列表。當遇到一個莫名其妙的聯結器錯誤時,是不是有人會徹底絕望,雖然提示裡寫著:“噢,你的第三方程式碼不支援ARC,新增 –fno-objc-arc 標誌即可解決!很簡單不是嗎?”
Android則相對簡單的的,它有一個單獨的manifest檔案,當開發者儲存任何檔案時,Eclipse通常會在整個系統中構建一次應用。當然,在許可權沒有配置正確導致應用程式不能執行的情況下,要是能夠給出更明確的提示就好了。總體講,Android應用的配置相對簡單容易。
結論:Android勝出
語言
Android是利用Java;iOS利用Objective-C。當然,也有例外,如Xamarin。相比Java,Objective-C顯得較為囉嗦,比如,在Java中的這句定義字串的語句:
String s2 = s1.replace(“abc”,”xyz”);
到Objective-C中變成了:
NSString *s2 = [s1 stringByReplacingOccurrencesOfString:@"abc" withString:@"xyz"];
但用Objective-C時間久了就會發現比Java更好更乾淨。Objective-C有程式碼塊,Java沒有;它有類別(categories),Java沒有。Objective-C不需要開發者去用try/catch進行異常處理,Java需要。
當然,Java有其自己的優點。比如更好的堆疊追蹤,這意味著追蹤零星的錯誤更加容易。在幾年前,Android在垃圾回收機制上一直有巨大的優勢。而現在,iOS平臺上有了自動引用計數,Android的優勢也漸漸消失了。
結論:iOS的Objective-C勝出
API
Android和iOS都給自己的開發者提供了巨大的軟體庫,廣義上講,這些庫基本類似:提供手機功能及特點的API、提供網路訪問功能、提供包括功能強大的WebView(基本上可以實現一個完整瀏覽器的功能)在內的全套檢視物件。最重要的是同時還提供控制器,基本上iOS ViewController與Android Acticity十分類似。
iOS提供了一組Android不具備的框架和特性——比如,沒有一款Android系統能夠提供媲美iOS Core Data framework的框架或其它特性。並且,iOS比Android更加乾淨,有著更好的設計。
另一個指標(有爭議):程式碼行數。對於擁有相近功能的某個應用來說,iOS平臺上通常利用1596行程式碼就可實現,包括標頭檔案,而對於Android上的Java程式碼及XML,則需要2109行,多了32%。
結論:iOS更優
使用者體驗設計
這一項對比中大多人會覺得蘋果是勝者。Interface Builder是Mac OS X平臺下用於設計和測試使用者介面(GUI)的應用程式。雖然Mac OS X下所有的使用者介面元素都可以使用程式碼直接生成;但IB能夠使開發者簡單快捷的開發出符合Mac OS X human-interface guidelines的GUI。通常開發者只需要通過簡單的拖拽(drag-n-drop)操作來構建GUI就可以了。IB使用Nib檔案儲存GUI資源,同時適用於Cocoa和Carbon程式。在需要的時候,Nib檔案可以被快速地載入記憶體。
理論上說,Android平臺也有一個具有可比性的視覺化工具。Android平臺上應用的開發將會面對各式各樣不同的螢幕尺寸,這是它不可忽視的問題。當然,iOS裝置的尺寸也在逐漸多樣化,iOS平臺未來一定會面臨一樣的問題。當然,Android也向開發者提供了icon包幫助開發者更加容易的完成UX設計。不過,iOS開發者也可以利用一些第三方的icon包,比如Icons8。
在這項對比上,iOS尤其特殊的優勢。首先,螢幕種類相對更加簡單,只有三種(iPad、iPad mini及iPhone)尺寸和兩種解析度;其次是其預設的iOS視覺元素如彈出式選單和訊息,比Android的視覺效果更有吸引力。
結論:iOS更勝一籌
碎片化問題
這點對比就無需多言了,Android的碎片化問題一直飽受詬病。但值得注意的是,谷歌正在著手進行碎片化整理工作,值得期待一下。
結論:顯而易見,Android的問題嚴重
應用釋出
Android平臺應用的釋出非常簡單,只需要通過一個簡單的Eclipse引導簽署你的應用,然後開發者就能擁有一個可以在任何Android平臺執行的APK檔案。然後開發者可以將這個APK檔案釋出到各種平臺上進行推廣,使用者安裝即可。如果應用在使用中出現了問題,出現程式碼錯誤,開發者也能馬上上傳修復的版本供使用者下載。
在iOS平臺上釋出一款應用簡直就是一場噩夢。單在建立證照及Distribution Profiles環節,不少開發者就需要花費一天的時間來搞定。而測試工作,如果不是有TestFlight這樣的應用,絕對是難以描述的糟糕。
結論:Android大勝
綜合來看,iOS比Android更有優勢。雖然Android有自己的一些優勢,但顯然開發一款優秀的iOS應用比開發一款Android應用更加容易。除自身因素之外,iOS使用者人群相對高階(富裕、甚至可能有影響力),所以大部分開發者會選擇iOS平臺作為應用開發第一平臺。
github主頁:https://github.com/chenyufeng1991 。歡迎大家訪問!
相關文章
- 鴻蒙 Android iOS 應用開發對比02鴻蒙AndroidiOS
- 大圖對比:iOS 7跟iOS 6有啥區別?iOS
- 前端開發薪資之各地區對比(圖文分析)前端
- Java開發和Android開發的區別JavaAndroid
- iOS 9.3.2對比iOS 9.3.1哪個開機速度快 ?iOS
- 前端開發薪資之各地區對比前端
- Vue與React兩個框架的粗略區別對比VueReact框架
- iOS開發中使用OC和swift的對比iOSSwift
- OLED和LED區別對比 OLED和LED哪個好?
- Spark與MapReduce的對比(區別)Spark
- 開發者經驗:為Android開發比iOS貴4倍AndroidiOS
- Android與 IOS系統的效能對比AndroidiOS
- 紅米Pro和小米4區別對比評測 哪個好?
- android MVC && MVP && MVVM分析和對比AndroidMVCMVPMVVM
- iOS開發中各種關鍵字的區別iOS
- 三星 C7和榮耀8區別對比評測分析
- PPT 分享:《10 個 Go Web 開發框架對比》GoWeb框架
- 開發內容分解的9個角度
- 前端開發框架對比前端框架
- 站在 Android 開發的角度,聊聊 Airbnb 的 Lottie!!!AndroidAI
- 對比git rm和rm的使用區別Git
- jQuery中empty與html("")的區別對比jQueryHTML
- Trademob:iOS和Android兩個移動平臺資料對比iOSAndroid
- 魅藍3和紅米4區別對比評測 哪個值得買?
- 華碩Zenfone 3和Deluxe/Ultra有什麼區別?對比哪個好?UX
- iOS開發-類別&延展iOS
- iOS12和Android 9 Pie對比哪個好呢?: 你會選擇哪一個?iOSAndroid
- 魅藍6T對比紅米5區別對比 魅藍6T和紅米5哪個好?
- Android/Linux Thermal框架分析及其Governor對比AndroidLinux框架Go
- Android事件分發:從原始碼角度分析View事件分發機制Android事件原始碼View
- Android 開發中 getContext 和 getActivity的區別AndroidContext
- 全面對比 Redis 和 Memcached 的 6 點區別Redis
- 小米Max和紅米Pro區別對比評測
- 紅米Pro和小米edge區別對比評測
- 樂2和紅米Pro區別對比評測
- 紅米pro和小米note區別對比評測
- 榮耀8和紅米4區別對比評測
- 小米5和小米note區別對比評測