Android與iOS開發(fā)比較--基礎(chǔ)篇

章節(jié)

上--基礎(chǔ)篇

  1. 開發(fā)工具
  2. 開發(fā)語言
  3. Kotlin & Swift
  4. 系統(tǒng)機制

中--實戰(zhàn)篇

  1. 工程文件結(jié)構(gòu)
  2. 界面繪制
  3. 數(shù)據(jù)存儲與傳遞
  4. 多線程與同步

1. 開發(fā)工具

  • Android使用Android Studio開發(fā)套件,基于IntelliJ IDEA,具有強大的文件編輯功能拾弃。自帶的模擬器不好用,需要搭配Gynemotion模擬器丽旅。
  • iOS主要使用XCode開發(fā),可以搭配AppCode做文件編輯器纺棺。
功能特性 Android Studio XCode
查看類或方法的引用處 Yes榄笙,方便 Yes,略麻煩
查看類的繼承關(guān)系 Yes No
全局搜索支持正則 Yes No
log查看 方便祷蝌,支持tag過濾 不方便
文件編輯易用性 Yes No
模擬器 啟動慢茅撞,不好用 啟動快
手機調(diào)試-緩存文件 容易抓取緩存文件 需要破解
支付調(diào)試 簡單、可靠 復(fù)雜巨朦、不可靠

2. 開發(fā)語言

  • Android主要使用Java開發(fā)米丘,是靜態(tài)語言,語法和主流語言比較類似糊啡。
  • iOS主要使用Objective-c(后邊用OC代稱)開發(fā)拄查,是動態(tài)語言,語法使用上有個性棚蓄。

2.1 點語法和中括號

Java的方法調(diào)用這樣:
String s2 = s1.replace(“abc”,”xyz”);

OC的方法調(diào)用這樣:
NSString *s2 = [s1 stringByReplacingOccurrencesOfString:@"abc" withString:@"xyz"];

2.2 命名空間

  • Java類有包路徑堕扶,一般不會出現(xiàn)類名重復(fù)沖突。
  • OC類沒有命名空間梭依,通常都加2個大寫字母的類名全綴稍算,并且OC推崇完整拼寫的長類名和方法名。

2.3 函數(shù)定義

Java沒有頭文件役拴。函數(shù)定義形如:
@Override
public void logThrowable(String eventName, Throwable throwable) { xxx }

OC有頭文件糊探。函數(shù)聲明形如:
-(void)achievementToCommentWithAlbumId:(NSString *)albumId
MusicId:(NSString *)musicId
index:(NSString *)index
adverId:(NSString *)adverId;

  • 為了提高函數(shù)調(diào)用效率,Java虛擬機為每個類建立了一個函數(shù)表扎狱。調(diào)用時侧到,根據(jù)方法簽名(函數(shù)名+參數(shù)列表)查找。編譯期會檢查方法是否存在淤击,不能調(diào)用不存在的方法匠抗。
  • OC的方法調(diào)用,其本質(zhì)是消息轉(zhuǎn)發(fā)污抬。Runtime會轉(zhuǎn)換成objc_msgSend(self, _cmd)汞贸。因此可以調(diào)用編譯期不存在的方法。消息機制也是OC動態(tài)特性的本質(zhì)印机,可以運行時增刪改類和函數(shù)矢腻。

2.4 靜態(tài)語言 & 動態(tài)語言

  • 動態(tài)類型語言:指在運行期間才去做數(shù)據(jù)類型檢查,也就是說射赛,用動態(tài)語言編程時多柑,永遠不用去給任何變量去指定數(shù)據(jù)類型。該語言會在你第一次給該變量賦值的時候楣责,在內(nèi)部把數(shù)據(jù)類型記錄下來竣灌。如ruby聂沙、Python、OC等初嘹。
  • 靜態(tài)類型語言:指在編譯期間就去做數(shù)據(jù)類型檢查及汉,編譯器必須知道所有類和函數(shù)的所有信息,也就是說在編碼時要聲明數(shù)據(jù)類型屯烦。如Java和c坷随、c++、swift等驻龟。
  • Java是靜態(tài)語言温眉,但后來加入了很多動態(tài)特性,如反射(調(diào)用)迅脐、字節(jié)碼操作(增改類)芍殖、腳本引擎(JS等)。
  • OC的動態(tài)特性谴蔑,主要有動態(tài)類型豌骏、動態(tài)綁定(消息轉(zhuǎn)發(fā))、動態(tài)載入隐锭。

2.5 訪問權(quán)限

  • Java的類窃躲、方法和成員變量有4種訪問權(quán)限:public、protect钦睡、default蒂窒、private。對類的封裝性和保護更好荞怒。
  • OC沒有顯式的訪問權(quán)限洒琢。不希望其它類調(diào)用,就不要聲明到.h文件褐桌,只定義到.m里衰抑。

2.6 空指針

  • NP錯誤占了Android Crash的一半左右。而OC沒這個問題荧嵌,變量定義后默認賦值nil呛踊,這是一個空對象,在其上調(diào)用任何方法及屬性都不報錯啦撮。
  • 后者對應(yīng)用的穩(wěn)定性更好谭网,但也有可能會導(dǎo)致隱含的邏輯錯誤不能被發(fā)現(xiàn)。

2.7 getter & setter

  • Java類私有變量赃春,需要自行定義getter和setter方法愉择,當(dāng)然AS提供了快捷鍵快速批量生成。
  • OC則在語法上提供了屬性@property的定義,簡化了代碼薄辅。如:
    @property (nonatomic,readwrite,strong) UILabel *buttonTopLabel;

2.8 閉包

閉包簡單來說要拂,就是一段代碼的集合抠璃,可以捕捉到外部變量站楚。

Java里的閉包是匿名內(nèi)部類,通常用于傳遞接口實現(xiàn)對象搏嗡,比如監(jiān)聽器:
mBtnRetry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { xxx; }
});

OC里的閉包是block窿春,類似函數(shù)指針,也經(jīng)常用于監(jiān)聽器實現(xiàn):
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { xxx; }];

無論是匿名內(nèi)部類采盒,還是block旧乞,使用時都要考慮內(nèi)存泄漏問題。前者是匿名內(nèi)部類生命周期過長引起的磅氨,后者是循環(huán)引用問題尺栖。

2.9 繼承和多態(tài)

Java和OC都是面向?qū)ο螅С址庋b烦租、繼承延赌、多態(tài)特性,但在具體使用上略有區(qū)別叉橱。

特性 Java Objective-c
接口 Yes, 名稱Interface Yes, 名稱Protocal
抽象類 Yes挫以,不能實現(xiàn)函數(shù),不能實例化窃祝,編譯時檢查 No
分類Category No Yes,可以給不是自己寫的類添加屬性和方法
類擴展 No Yes掐松,定義在.m,保護私有屬性
多繼承 No, 可用多接口 No

2.10 內(nèi)存回收機制

C++對象使用完后要主動釋放(delete a)粪小,否則會產(chǎn)生內(nèi)存泄漏大磺。而Java和OC大部分情況下無需考慮這個問題。

  • JVM實現(xiàn)了垃圾回收機制探膊,自動釋放無用對象杠愧。相應(yīng)地,對象創(chuàng)建要標(biāo)記為強軟弱虛4個級別突想,會有不同的回收策略殴蹄。
  • OC使用ARC自動引用技術(shù),編譯器根據(jù)約定信息來插入釋放代碼猾担。對象創(chuàng)建要標(biāo)記為strong袭灯、weak(assign)、copy等绑嘹。

這兩種方法各有特點:

特性 垃圾回收機制 引用計數(shù)機制
檢測時機 運行期 編譯期
識別循環(huán)引用 Yes稽荧,孤島檢測 No
性能 略低,GC頻繁會影響性能 性能好

2.11 類加載機制

3. Kotlin & Swift

我就是一片空白工腋。

4. 系統(tǒng)機制

4.1系統(tǒng)架構(gòu)

Android是基于Linux內(nèi)核姨丈,iOS是基于UNIX內(nèi)核畅卓。

Android系統(tǒng)是四層架構(gòu),高到低分別是:

  • 應(yīng)用程序?qū)樱ˋpplications):即App
  • 應(yīng)用程序框架層(Application Framework):包括四大組件管理蟋恬、窗口管理翁潘、包管理、電話管理歼争、位置管理等
  • 系統(tǒng)運行庫層 (Libraries and Android runtime):包括系統(tǒng)庫如Surface Manager拜马、Media Framework、SQLite沐绒、OpenGL等俩莽,Android運行時庫、Dalvik虛擬機也在這里乔遮。
  • linux核心層 (Linux Kernel)

圖如:
Android系統(tǒng)架構(gòu)圖

iOS系統(tǒng)也是四層架構(gòu)扮超,高到低分別是:

  • 可觸摸層(Cocoa Touch layer):各種UI組件、觸屏事件處理等蹋肮。
  • 媒體層(Media layer):提供了圖片出刷,音樂,影片等多媒體功能括尸。
  • 核心服務(wù)層(Core Services layer):包括Foundation.Framework和Core Foundation.Framework巷蚪,是基礎(chǔ)類庫,如字符串濒翻、日歷屁柏、時間等。
  • 核心操作系統(tǒng)層(Core OS layer):即系統(tǒng)內(nèi)核有送,包括驅(qū)動淌喻、內(nèi)存管理、線程管理雀摘、文件系統(tǒng)裸删、網(wǎng)絡(luò)等

圖如:

4.2 運行機制

  • Android是通過Dalvik虛擬機來啟動程序的,它主要負責(zé)完成對象生命周期管理阵赠、堆棧管理涯塔、線程管理、安全和異常管理清蚀,以及垃圾回收等匕荸。
  • iOS使用開源庫dyld來運行程序,而線程管理枷邪、內(nèi)存管理等都在Core OS layer榛搔。
特性 Android iOS
多進程 Yes No
后臺運行 Yes No
數(shù)據(jù)存儲 ram私有目錄
sd卡私有目錄
sd卡公共目錄
沙盒
keyChain
消息推送 應(yīng)用層實現(xiàn)
app死掉則不能接收消息
無需用戶授權(quán)
系統(tǒng)層實現(xiàn),含本地推送和APNS
app死掉還可以接收消息
需用戶授權(quán)
內(nèi)容分享 系統(tǒng)Intent實現(xiàn) 接Sdk,如FB践惑、twitter等

4.3 安全機制腹泌、權(quán)限校驗:

Android和iOS的安全機制都有以下特性:

  • 進程沙箱隔離機制:每個App都運行在獨立的沙盒里。
  • 應(yīng)用程序簽名機制:防止惡意軟件替換安裝的應(yīng)用尔觉。
  • 權(quán)限聲明機制:
  • 訪問控制機制:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凉袱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子穷娱,更是在濱河造成了極大的恐慌绑蔫,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泵额,死亡現(xiàn)場離奇詭異,居然都是意外死亡携添,警方通過查閱死者的電腦和手機嫁盲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烈掠,“玉大人羞秤,你說我怎么就攤上這事∽蟮校” “怎么了瘾蛋?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長矫限。 經(jīng)常有香客問我哺哼,道長,這世上最難降的妖魔是什么叼风? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任取董,我火速辦了婚禮,結(jié)果婚禮上无宿,老公的妹妹穿的比我還像新娘茵汰。我一直安慰自己,他們只是感情好孽鸡,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布蹂午。 她就那樣靜靜地躺著,像睡著了一般彬碱。 火紅的嫁衣襯著肌膚如雪豆胸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天堡妒,我揣著相機與錄音配乱,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛搬泥,可吹牛的內(nèi)容都是我干的桑寨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼忿檩,長吁一口氣:“原來是場噩夢啊……” “哼尉尾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燥透,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤沙咏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后班套,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肢藐,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年吱韭,在試婚紗的時候發(fā)現(xiàn)自己被綠了吆豹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡理盆,死狀恐怖痘煤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猿规,我是刑警寧澤衷快,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站姨俩,受9級特大地震影響蘸拔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哼勇,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一都伪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧积担,春花似錦陨晶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至的烁,卻和暖如春褐耳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渴庆。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工铃芦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雅镊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓刃滓,卻偏偏與公主長得像仁烹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咧虎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,092評論 1 32
  • 前言:面試筆試都是必考語法知識點卓缰。請認真復(fù)習(xí)和深入研究OC。 目錄:iOS-面試題-OC基礎(chǔ)篇 (1) - (84...
    麥穗0615閱讀 4,251評論 0 33
  • 周末在言君姐姐家玩砰诵,順手給她的彩虹糖寶貝拍了一組照片征唬,小可愛快把我萌化了!W屡怼总寒!小家伙特有主見,總是語出驚人尉间,我問她...
    簡糯閱讀 256評論 0 0
  • tomcat服務(wù)器把http請求信息封裝到HttpServletRequest對象中偿乖。開發(fā)者通過HttpServl...
    小小機器人閱讀 540評論 0 0
  • 一、學(xué)習(xí)與實踐 1.付出不亞于任何人的努力 2.要謙虛哲嘲,不要驕傲 3.要每天反省 4.活著,就要感謝 5.積善行媳禁,...
    藍曉霽閱讀 145評論 0 0