iOS面試題06-應(yīng)用程序(★★)

2018 iOS面試題系列

一、NSRunLoop的實(shí)現(xiàn)機(jī)制,及在多線程中如何使用

NSRunLoop是IOS消息機(jī)制的處理模式

  • 1.NSRunLoop的主要作用:控制NSRunLoop里面線程的執(zhí)行和休眠,在有事情做的時(shí)候使當(dāng)前NSRunLoop控制的線程工作,沒(méi)有事情做讓當(dāng)前NSRunLoop的控制的線程休眠。

  • 2.NSRunLoop 就是一直在循環(huán)檢測(cè),從線程start到線程end,檢測(cè)
    inputsource(如點(diǎn)擊,雙擊等操作)異步事件,檢測(cè)timesource同步事件,檢測(cè)到輸入源會(huì)執(zhí)行處理函數(shù),首先會(huì)產(chǎn)生通知,corefunction向線程添加runloop observers來(lái)監(jiān)聽(tīng)事件,意在監(jiān)聽(tīng)事件發(fā)生時(shí)來(lái)做處理。

  • 3.runloopmode是一個(gè)集合,包括監(jiān)聽(tīng):事件源,定時(shí)器,以及需通知的runloop observers

    1. 只有在為你的程序創(chuàng)建次線程的時(shí)候,才需要運(yùn)行runloop。對(duì)于程序的主線程而言,runloop是關(guān)鍵部分。Cocoa提供了運(yùn)行主線程runloop的代碼同時(shí)也會(huì)自動(dòng)運(yùn)行runloop。IOS程序UIApplication中的run方法在程序正常啟動(dòng)的時(shí)候就會(huì)啟動(dòng)runloop。如果你使用xcode提供的模板創(chuàng)建的程序,那你永遠(yuǎn)不需要自己去啟動(dòng)runloop
    1. 在多線程中,你需要判斷是否需要runloop。如果需要runloop,那么你要負(fù)責(zé)配置runloop并啟動(dòng)。你不需要在任何情況下都去啟動(dòng)runloop。比如,你使用線程去處理一個(gè)預(yù)先定義好的耗時(shí)極長(zhǎng)的任務(wù)時(shí),你就可以毋需啟動(dòng)runloop。Runloop只在你要和線程有交互時(shí)才需要 。

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

一般的應(yīng)用在進(jìn)入后臺(tái)的時(shí)候可以獲取一定時(shí)間來(lái)運(yùn)行相關(guān)任務(wù),也就是說(shuō)可以在后臺(tái)運(yùn)行一小段時(shí)間(10S左右)。

  1. 后臺(tái)播放音樂(lè)
  2. 后臺(tái)GPS跟蹤
  3. 后臺(tái)voip支持

三、簡(jiǎn)單說(shuō)一下 APP的啟動(dòng)過(guò)程,從 main文件開(kāi)始說(shuō)起

程序啟動(dòng)分為兩類:1.有storyboard2.沒(méi)有storyboard

  • 有storyboard情況下:
    1.main函數(shù)
    2.UIApplicationMain
    創(chuàng)建UIApplication對(duì)象
    創(chuàng)建UIApplication的delegate對(duì)象
    3.根據(jù)Info.plist獲得最主要storyboard的文件名,加載最主要的
    storyboard(有storyboard)
    創(chuàng)建UIWindow
    創(chuàng)建和設(shè)置UIWindow的rootViewController
    顯示窗口

  • 沒(méi)有storyboard情況下:
    1.main函數(shù)
    2.UIApplicationMain
    創(chuàng)建UIApplication對(duì)象
    創(chuàng)建UIApplication的delegate對(duì)象
    3.delegate對(duì)象開(kāi)始處理(監(jiān)聽(tīng))系統(tǒng)事件(沒(méi)有storyboard)
    程序啟動(dòng)完畢的時(shí)候, 就會(huì)調(diào)用代理的application:didFinishLaunchingWithOptions:方法在application:didFinishLaunchingWithOptions:中創(chuàng)建UIWindow創(chuàng)建和設(shè)置UIWindow的rootViewController
    顯示窗口


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

五、本地通知和遠(yuǎn)程推送通知對(duì)基本概念和用法?

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


六、如果有人惡意重復(fù)注冊(cè)賬號(hào),讓我寫(xiě)一個(gè)接口,我怎么防止這樣的事情。

使用HTTPS,加時(shí)間戳1分鐘內(nèi)不允許重復(fù)發(fā)送, 短信驗(yàn)證, 判斷手機(jī)號(hào)段保證號(hào)碼正確,不是虛擬號(hào)嗎. 保證郵箱,手機(jī)號(hào)等設(shè)備的標(biāo)識(shí)唯一,并且在輸入驗(yàn)證時(shí)判斷,如果多次驗(yàn)證碼錯(cuò)誤.可以鎖定賬號(hào)或著手機(jī)注冊(cè).


七、最常使用的地圖是什么?

國(guó)內(nèi):百度、高德
國(guó)外:mapbox


八、集成地圖時(shí)都使用了哪些技術(shù)?

使用地理編碼和反編碼進(jìn)行地圖定位,查找等功能,大頭針的使用,路線查找。
如果安卓和iOS用的不是同一個(gè)地圖(比如安卓用的百度,iOS用的高德),需要做一套地圖糾偏(國(guó)內(nèi)的地圖對(duì)應(yīng)的經(jīng)緯度都是有偏差的,稱為“火星坐標(biāo)”)


九、集成地圖有什么用?

可以給用戶更好的體驗(yàn),使用蘋(píng)果原生地圖在位置定位的時(shí)候需要跟后臺(tái)的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,容易出錯(cuò),因?yàn)橐话愫笈_(tái)用的都是百度或者高德地圖,和蘋(píng)果原生地圖的坐標(biāo)不同,就算轉(zhuǎn)換后也容易出現(xiàn)偏差


十、簡(jiǎn)單給出購(gòu)物車(chē)的實(shí)現(xiàn)思路?

iOS走近商城APP(五 購(gòu)物車(chē))


十一、分析一下使用手機(jī)獲取驗(yàn)證碼注冊(cè)賬號(hào)的實(shí)現(xiàn)邏輯(給了一個(gè)示例圖),發(fā)送到手機(jī)的驗(yàn)證碼超過(guò)60秒鐘后重新發(fā)送

定義一個(gè) label屬性,賦值為59秒在定義一個(gè) count 設(shè)置一個(gè)timer每次減少一秒把count-- 再把 count 的值拼接到 label上當(dāng) count == 0 的時(shí)候在顯示驗(yàn)證碼輸入


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,656評(píng)論 30 472
  • 1. NSRunLoop的實(shí)現(xiàn)機(jī)制,及在多線程中如何使用? NSRunLoop是iOS消息機(jī)制的處理模式 NSRu...
    KyneChen閱讀 457評(píng)論 0 1
  • 翻譯來(lái)源: RunLoops Run Loops RunLoops是與線程緊密相關(guān)的基礎(chǔ)架構(gòu)的一部分,簡(jiǎn)稱運(yùn)行循環(huán)...
    AlexCorleone閱讀 694評(píng)論 0 1
  • 1,NSObject中description屬性的意義,它可以重寫(xiě)嗎?答案:每當(dāng) NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,351評(píng)論 2 19
  • 作者: 綠意 微信號(hào):lvyi973965 《向前一步》作者:謝麗爾.桑德...
    f7d01673dcd6閱讀 544評(píng)論 0 1

友情鏈接更多精彩內(nèi)容