iOS精華面試題分享

作為iOS小白扑馁,總免不了各種面試穆桂,特將自己近期的幾道面試題小結(jié)一下深胳。同時也將無意閑逛時發(fā)現(xiàn)一位超級全面的面試總結(jié)分享給大家,共同進(jìn)步佩研。

1. NSRunLoop的實現(xiàn)機制,及在多線程中如何使用?

NSRunLoop是IOS消息機制的處理模式柑肴。
 NSRunLoop的主要作用:控制NSRunLoop里面線程的執(zhí)行和休眠,在有事情做的時候使當(dāng)前NSRunLoop控制的線程工作旬薯,沒有事情做讓當(dāng)前NSRunLoop的控制的線程休眠晰骑。
 NSRunLoop 就是一直在循環(huán)檢測,從線程start到線程end绊序,檢測inputsource(如點擊硕舆,雙擊等操作)同步事件,檢測timesource同步事件骤公,檢測到輸入源會執(zhí)行處理函數(shù)抚官,首先會產(chǎn)生通知,corefunction向線程添加runloop observers來監(jiān)聽事件阶捆,意在監(jiān)聽事件發(fā)生時來做處理凌节。
 runloopmode是一個集合,包括監(jiān)聽:事件源洒试,定時器倍奢,以及需通知的runloop observers。
*--**--**--**--**--**--*
 只有在為你的程序創(chuàng)建次線程的時候垒棋,才需要運行run loop卒煞。對于程序的主線程而言,run loop是關(guān)鍵部分叼架。Cocoa提供了運行主線程run loop的代碼同時也會自動運行run loop畔裕。IOS程序UIApplication中的run方法在程序正常啟動的時候就會啟動run loop。如果你使用xcode提供的模板創(chuàng)建的程序碉碉,那你永遠(yuǎn)不需要自己去啟動run loop。
 在多線程中淮韭,你需要判斷是否需要run loop垢粮。如果需要run loop,那么你要負(fù)責(zé)配置run loop并啟動靠粪。你不需要在任何情況下都去啟動run loop蜡吧。比如,你使用線程去處理一個預(yù)先定義好的耗時極長的任務(wù)時占键,你就可以毋需啟動run loop昔善。Run loop只在你要和線程有交互時才需要。

2.IOS7之前,后臺執(zhí)行內(nèi)容有幾種形式,都是什么

一般的應(yīng)用在進(jìn)入后臺的時候可以獲取一定時間來運行相關(guān)任務(wù)畔乙,也就是說可以在后臺運行一小段時間(10s左右)君仆。
  1. 后臺播放音樂
  2. 后臺GPS跟蹤
  3. 后臺voip支持

3. 簡單說一下APP的啟動過程,從main文件開始說起

程序啟動分為兩類:1.有storyboard 2.沒有storyboard
有storyboard情況下:
1.main函數(shù)
2.UIApplicationMain
創(chuàng)建UIApplication對象--創(chuàng)建UIApplication的delegate對象。
3.根據(jù)Info.plist獲得最主要storyboard的文件名,加載最主要的storyboard(有storyboard)。
創(chuàng)建UIWindow--創(chuàng)建和設(shè)置UIWindowrootViewController
--顯示窗口返咱。
沒有storyboard情況下:
1.main函數(shù)
2.UIApplicationMain
創(chuàng)建UIApplication對象
創(chuàng)建UIApplication的delegate對象
delegate對象開始處理(監(jiān)聽)系統(tǒng)事件(沒有storyboard)
程序啟動完畢的時候, 就會調(diào)用代理 Eapplication:didFinishLaunchingWithOptions:方法
在application:didFinishLaunchingWithOptions:中創(chuàng)建UIWindow
創(chuàng)建和設(shè)置UIWindow的rootViewController
顯示窗口

4.把程序自己關(guān)掉和程序進(jìn)入后臺,遠(yuǎn)程推送的區(qū)別

關(guān)掉后不執(zhí)行任何代碼,不能處理事件钥庇。
應(yīng)用程序進(jìn)入后臺狀態(tài)不久后轉(zhuǎn)入掛起狀態(tài)。在這種狀態(tài)下咖摹,應(yīng)用程序不執(zhí)行任何代碼评姨,并有可能在任意時候從內(nèi)存中刪除。只有當(dāng)用戶再次運行此應(yīng)用萤晴,應(yīng)用才會從掛起狀態(tài)喚醒吐句,代碼得以繼續(xù)執(zhí)行.或者進(jìn)入后臺時開啟多任務(wù)狀態(tài),保留在內(nèi)存中店读,這樣就可以執(zhí)行系統(tǒng)允許的動作嗦枢。
遠(yuǎn)程推送是由遠(yuǎn)程服務(wù)器上的程序發(fā)送到APNS,再由APNS把消息推送至設(shè)備上的程序,當(dāng)應(yīng)用程序收到推送的消息會自動調(diào)用特定的方法執(zhí)行事先寫好的代碼。

5.本地通知和遠(yuǎn)程推送通知對基本概念和用法

本地通知和遠(yuǎn)程推送通知都可以向不在前臺運行的應(yīng)用發(fā)送消息,這種消息既可能是即將發(fā)生的事件,也可能是服務(wù)器的新數(shù)據(jù).不管是本地通知還是遠(yuǎn)程通知,他們在程序界面的顯示效果相同,都可能顯示為一段警告信息或應(yīng)用程序圖標(biāo)上的微章两入。
  本地通知和遠(yuǎn)程推送通知的基本目的都是讓應(yīng)用程序能夠通知用戶某些事情, 而且不需要應(yīng)用程序在前臺運行.二者的區(qū)別在于本地通知由本應(yīng)用負(fù)責(zé)調(diào)用,只能從當(dāng)前設(shè)備上的iOS發(fā)出, 而遠(yuǎn)程通知由遠(yuǎn)程服務(wù)器上的程序發(fā)送到APNS,再由APNS把消息推送至設(shè)備上的程序净宵。

6. MVC設(shè)計模式是什么? 你還熟悉什么設(shè)計模式裹纳?

設(shè)計模式:并不是一種新技術(shù)择葡,而是一種編碼經(jīng)驗,使用比如java中的接口剃氧,iphone中的協(xié)議敏储,繼承關(guān)系等基本手段,用比較成熟的邏輯去處理某一種類型的事情朋鞍,總結(jié)為所謂設(shè)計模式已添。面向?qū)ο缶幊讨校琷ava已經(jīng)歸納了23種設(shè)計模式滥酥。
mvc設(shè)計模式 :模型更舞,視圖,控制器坎吻,可以將整個應(yīng)用程序在思想上分成三大塊缆蝉,對應(yīng)是的數(shù)據(jù)的存儲或處理,前臺的顯示瘦真,業(yè)務(wù)邏輯的控制刊头。 Iphone本身的設(shè)計思想就是遵循mvc設(shè)計模式。其不屬于23種設(shè)計模式范疇诸尽。
代理模式:代理模式給某一個對象提供一個代理對象原杂,并由代理對象控制對源對象的引用.比如一個工廠生產(chǎn)了產(chǎn)品,并不想直接賣給用戶您机,而是搞了很多代理商穿肄,用戶可以直接找代理商買東西年局,代理商從工廠進(jìn)貨.常見的如QQ的自動回復(fù)就屬于代理攔截,代理模式在iphone中得到廣泛應(yīng)用被碗。
單例模式:說白了就是一個類不通過alloc方式創(chuàng)建對象某宪,而是用一個靜態(tài)方法返回這個類的對象。系統(tǒng)只需要擁有一個的全局對象锐朴,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為兴喂,比如想獲得[UIApplication sharedApplication];任何地方調(diào)用都可以得到 UIApplication的對象,這個對象是全局唯一的焚志。
觀察者模式: 當(dāng)一個物體發(fā)生變化時衣迷,會通知所有觀察這個物體的觀察者讓其做出反應(yīng)。實現(xiàn)起來無非就是把所有觀察者的對象給這個物體酱酬,當(dāng)這個物體的發(fā)生改變壶谒,就會調(diào)用遍歷所有觀察者的對象調(diào)用觀察者的方法從而達(dá)到通知觀察者的目的。
最后給大家分享一個超級大牛的面試題庫--->踩飛機票膳沽。
https://github.com/ChenYilong/iOSInterviewQuestions
<p>超全iOS面試題集錦<a ></p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汗菜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挑社,更是在濱河造成了極大的恐慌陨界,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痛阻,死亡現(xiàn)場離奇詭異菌瘪,居然都是意外死亡,警方通過查閱死者的電腦和手機阱当,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門俏扩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弊添,你說我怎么就攤上這事录淡。” “怎么了油坝?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵嫉戚,是天一觀的道長。 經(jīng)常有香客問我免钻,道長彼水,這世上最難降的妖魔是什么崔拥? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任极舔,我火速辦了婚禮,結(jié)果婚禮上链瓦,老公的妹妹穿的比我還像新娘拆魏。我一直安慰自己盯桦,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布渤刃。 她就那樣靜靜地躺著拥峦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卖子。 梳的紋絲不亂的頭發(fā)上略号,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音洋闽,去河邊找鬼玄柠。 笑死,一個胖子當(dāng)著我的面吹牛诫舅,可吹牛的內(nèi)容都是我干的羽利。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼刊懈,長吁一口氣:“原來是場噩夢啊……” “哼这弧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虚汛,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤匾浪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泽疆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體户矢,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年殉疼,在試婚紗的時候發(fā)現(xiàn)自己被綠了梯浪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓢娜,死狀恐怖挂洛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情眠砾,我是刑警寧澤虏劲,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站褒颈,受9級特大地震影響柒巫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谷丸,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一堡掏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刨疼,春花似錦泉唁、人聲如沸鹅龄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扮休。三九已至,卻和暖如春拴鸵,著一層夾襖步出監(jiān)牢的瞬間玷坠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工劲藐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侨糟,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓瘩燥,卻偏偏與公主長得像秕重,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子厉膀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,165評論 30 470
  • 由于文章長度限制溶耘,本文作為[譯]線程編程指南(一)后續(xù)部分。 Run Loops Run loop是與線程相關(guān)的基...
    巧巧的二表哥閱讀 1,190評論 0 5
  • 這是一篇對Run Loop開發(fā)文檔《Threading Program Guide:Run Loops》的翻譯服鹅,來...
    鴻雁長飛光不度閱讀 3,649評論 3 29
  • 1.如何追蹤app崩潰率凳兵,如何解決線上閃退 當(dāng) iOS設(shè)備上的App應(yīng)用閃退時,操作系統(tǒng)會生成一個crash日志企软,...
    中婭沙漏閱讀 582評論 0 5
  • ~「去蕪存菁庐扫,心意不二」~ 茶飲市場根據(jù)近幾年的蓬勃發(fā)展,各自在不同的基礎(chǔ)上尋找新的出路仗哨,無論是傳統(tǒng)茶與街飲快飲行...
    吳建伸閱讀 306評論 0 0