ios常見面試題總結(jié)

1.談一談IOS內(nèi)存管理機(jī)制。

IOS內(nèi)存管理機(jī)制的原理是引用計(jì)數(shù),當(dāng)這塊內(nèi)存被創(chuàng)建后引用計(jì)數(shù)加1,這時(shí)若果有另一個(gè)對(duì)象或指針指向這塊內(nèi)存巡揍,那么引用計(jì)數(shù)再加1实苞,之后如果有一個(gè)對(duì)象不再指向這塊內(nèi)存缭受,則引用計(jì)數(shù)減1分瘾,最后當(dāng)不在有對(duì)象或指針指向這塊內(nèi)存,引用計(jì)數(shù)變?yōu)?紊婉,則這塊內(nèi)存被釋放药版。

copy和strong都修飾對(duì)象,
strong修飾的nsstring喻犁,屬于淺拷貝槽片,不會(huì)開辟新內(nèi)存,會(huì)根據(jù)原數(shù)據(jù)的改變而改變肢础,一般修飾可變數(shù)據(jù)还栓。
copy修飾的nssting,屬于深拷貝传轰,會(huì)開辟新的內(nèi)存剩盒,不會(huì)根據(jù)原數(shù)據(jù)的改變而改變。一般修飾不可變數(shù)據(jù)慨蛙。

assign辽聊,弱引用纪挎,修飾基本數(shù)據(jù)類型,也可修飾對(duì)象跟匆,但是會(huì)產(chǎn)生野指針异袄。
weak,弱引用玛臂,只可修飾對(duì)象烤蜕。

2,vc的生命周期迹冤。
loadView
viewDidLoad
viewWillAppear
viewWillLayoutSubviews
viewDidLayoutSubviews
viewDidAppear
viewWillDisAppear
viewDidDisAppear
dealloc

3讽营,kvc和kvo的實(shí)現(xiàn)原理。
KVC : 鍵值編碼(Key-Value Coding),它是一種通過key值訪問類屬性的機(jī)制叁巨,其中 KVC 原理:當(dāng)調(diào)用- (void)setValue:(id)value forKey:(NSString *)key時(shí)斑匪,KVC底層的執(zhí)行機(jī)制如下:先搜索對(duì)應(yīng)屬性的setter方法,如果沒有搜索到锋勺,就查找_key,_isKey狡蝶,key庶橱,isKey,最后賦值贪惹。
KVO:對(duì)監(jiān)聽的類會(huì)生成一個(gè)它的派生子類苏章,然后重寫了被觀察屬性setter方法,當(dāng)屬性發(fā)生改變時(shí)奏瞬,發(fā)送通知獲取到屬性的更改情況枫绅。

4,Runloop硼端。
主線程的默認(rèn)就有了 Runloop并淋。
一個(gè)線程對(duì)應(yīng)一個(gè) Runloop。
Runloop 存儲(chǔ)在一個(gè)全局的可變字典里珍昨,線程是 key 县耽,Runloop 是 value。

RunLoop的運(yùn)行模式共有5種镣典,RunLoop只會(huì)運(yùn)行在一個(gè)模式下兔毙,要切換模式,就要暫停當(dāng)前模式兄春,重寫啟動(dòng)一個(gè)運(yùn)行模式澎剥。
-kCFRunLoopDefaultMode, App的默認(rèn)運(yùn)行模式,通常主線程是在這個(gè)運(yùn)行模式下運(yùn)行

  • UITrackingRunLoopMode, 跟蹤用戶交互事件(用于 ScrollView 追蹤觸摸滑動(dòng)赶舆,保證界面滑動(dòng)時(shí)不受其他Mode影響)
  • kCFRunLoopCommonModes, 偽模式哑姚,不是一種真正的運(yùn)行模式
  • UIInitializationRunLoopMode:在剛啟動(dòng)App時(shí)第進(jìn)入的第一個(gè)Mode趾唱,啟動(dòng)完成后就不再使用
  • GSEventReceiveRunLoopMode:接受系統(tǒng)內(nèi)部事件,通常用不到

Runloop的作用:
1蜻懦,處理crash甜癞,在主線程中調(diào)用堆棧中異常信號(hào),當(dāng)捕獲到異常信號(hào)的時(shí)候宛乃,用Runloop保住線程悠咱,以致于程序不會(huì)立馬crash
2,線程闭髁叮活 子線程方法中添加runloop析既。
3,檢測 優(yōu)化卡頓 將observer添加到主線程谆奥,將Timer添加到子線程的runloop中

5眼坏,runtime。
Runtime是iOS核心運(yùn)行機(jī)制之一酸些,iOS App加載庫宰译、加載類、執(zhí)行方法調(diào)用魄懂,全靠Runtime沿侈。
runtime是一套比較底層的純C語言API, 屬于一個(gè)C語言庫, 包含了很多底層的C語言API。
在我們平時(shí)編寫的OC代碼中, 程序運(yùn)行過程時(shí), 其實(shí)最終都是轉(zhuǎn)成了runtime的C語言代碼市栗。

objc_msgSend : 給對(duì)象發(fā)送消息
class_copyMethodList : 遍歷某個(gè)類所有的方法
class_copyIvarList : 遍歷某個(gè)類所有的成員變量

runtime具體應(yīng)用

利用關(guān)聯(lián)對(duì)象(AssociatedObject)給分類添加屬性
遍歷類的所有成員變量(修改textfield的占位文字顏色缀拭、字典轉(zhuǎn)模型、自動(dòng)歸檔解檔)
動(dòng)態(tài)交換方法實(shí)現(xiàn)(交換系統(tǒng)的方法)
利用消息轉(zhuǎn)發(fā)機(jī)制解決方法找不到的異常問題
KVC 字典轉(zhuǎn)模型

消息轉(zhuǎn)發(fā)機(jī)制:有3個(gè)階段填帽,消息發(fā)送蛛淋,動(dòng)態(tài)解析方法,消息轉(zhuǎn)發(fā)篡腌。
消息發(fā)送:當(dāng)調(diào)用某個(gè)對(duì)象的方法的時(shí)候褐荷,會(huì)通過isa指針找到該類的cache緩存列表中查找,如果沒有找到就去方法列表中查找哀蘑,如果還沒有找到就去他的父類中查找诚卸,直到最后查找到后為nil。
然后就調(diào)用動(dòng)態(tài)解析方法绘迁。
是指在運(yùn)行時(shí)通過類的resolvemethd方法動(dòng)態(tài)為這個(gè)這個(gè)方法創(chuàng)建實(shí)現(xiàn)合溺,如果還是沒有找到,
就通過消息轉(zhuǎn)發(fā)缀台,把這個(gè)消息發(fā)送給其他對(duì)象來找這個(gè)方法棠赛。最后還沒找到,就會(huì)拋出異常。

6睛约,多線程鼎俘。
NsTread,屬于輕量級(jí)的,需要手動(dòng)管理線程周期辩涝。
GCD贸伐,是基于c語言的線程,自動(dòng)管理線程周期怔揩。
NSOpreation捉邢,是基于GCD封裝的,具有更多的功能商膊。

串行同步伏伐,不需要開辟線程,一個(gè)一個(gè)執(zhí)行晕拆。
串行異步藐翎,不需要開辟新的線程,一起執(zhí)行实幕。
并行同步吝镣,開辟新的線程,一個(gè)一個(gè)執(zhí)行茬缩。
并行異步赤惊,開辟新的線程,一起執(zhí)行凰锡。

兩個(gè)子線程,需要同步執(zhí)行圈暗,需要使用信號(hào)量掂为,線程鎖,柵欄员串。
多個(gè)子線程全部執(zhí)行完勇哗,在進(jìn)入子線程,使用線程組寸齐,groupEnter欲诺,GroupLeave

7、動(dòng)態(tài)庫與靜態(tài)庫的區(qū)別渺鹦。
編譯方式不同扰法。
靜態(tài)庫是在編譯時(shí)將庫的代碼打包到可執(zhí)行程序中,
動(dòng)態(tài)庫則是在運(yùn)行時(shí)動(dòng)態(tài)加載到程序中的毅厚。

內(nèi)存使用方式不同塞颁。
靜態(tài)庫的代碼被打包進(jìn)了可執(zhí)行程序中,所以不額外占用內(nèi)存。
動(dòng)態(tài)庫的代碼在程序運(yùn)行時(shí)才會(huì)被加載到內(nèi)存中祠锣,會(huì)占用額外內(nèi)存酷窥,但是可以被多個(gè)程序使用,從而又節(jié)省了內(nèi)存伴网。

更新和維護(hù)方式不同蓬推。
靜態(tài)庫的代碼被打包成可執(zhí)行程序的一部分,因此靜態(tài)庫的更新和維護(hù)需要重新進(jìn)行編譯和部署澡腾;
動(dòng)態(tài)庫可以獨(dú)立于程序進(jìn)行更新沸伏,因?yàn)閯?dòng)態(tài)庫作為一個(gè)單獨(dú)的文件存在于系統(tǒng)中,可以被多個(gè)程序共享蛋铆。

8馋评、Http與Https
1.Http是超文本傳輸協(xié)議,數(shù)據(jù)明文傳輸刺啦,所以會(huì)被抓包導(dǎo)致信息泄露留特,有安全風(fēng)險(xiǎn)問題!
2.Https 則是具有安全性的SSL加密傳輸協(xié)議玛瘸。(http和TCP 之間加了一層TSL 或者 SSL的安全層)
3.Http和Https使用的是完全不同的連接方式用的端口也不一樣,前者是80,后者是443蜕青。
4.Http的連接很簡單,是無狀態(tài)的。
5.HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸糊渊、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議右核。
6.Https協(xié)議需要到CA付費(fèi)申請(qǐng)證書,

9、對(duì)稱加密和非對(duì)稱加密
對(duì)稱加密算法是指加密和解密使用相同的密鑰的加密算法渺绒。
常見的對(duì)稱加密算法有DES贺喝、AES。效率高快宗兼。
非對(duì)稱加密算法是指加密和解密使用不同的密鑰的加密算法躏鱼。在非對(duì)稱加密中,發(fā)送方使用公鑰將明文加密為密文殷绍,接收方使用私鑰將密文解密為明文染苛。常見的非對(duì)稱加密算法有RSA、ElGamal等主到。更安全茶行。

10、面向?qū)ο箝_發(fā)登钥。封裝畔师,繼承,多態(tài)怔鳖。

11茉唉、啟動(dòng)速度優(yōu)化固蛾。
1.是減少系統(tǒng)依賴庫
2.減少自己需要加入的各種三方庫(庫越少dyld加載的速度越快,就能越早的返回程序入口main函數(shù)的地址)
3.有一些自己加入的庫度陆,能選擇靜態(tài)庫就選擇靜態(tài)庫艾凯,少用動(dòng)態(tài)庫,因?yàn)閯?dòng)態(tài)庫的加載方式比靜態(tài)庫慢懂傀。如果必須依賴動(dòng)態(tài)庫趾诗,則把多個(gè)非系統(tǒng)的動(dòng)態(tài)庫合并成一個(gè)動(dòng)態(tài)庫。
4.使用appCode檢查項(xiàng)目中蹬蚁,那些類和方法沒有使用到恃泪。 把沒有使用到的刪除
5.圖片資源壓縮到最小,因?yàn)樵趩?dòng)加載時(shí)會(huì)加載資源圖片進(jìn)行IO操作犀斋。所以圖片小加載速度也會(huì)顯著提升贝乎。
6.內(nèi)存上優(yōu)化:類和方法名不要太?。

12.mvc和mvvm的區(qū)別叽粹。
mvc览效,model處理數(shù)據(jù)邏輯,view負(fù)責(zé)數(shù)據(jù)展示虫几,controller負(fù)責(zé)處理用戶交互連接model和view锤灿,是單向傳輸。
mvvm辆脸,MVVM由Model(模型)但校、View(視圖)和ViewModel(視圖模型)組成,MVVM實(shí)現(xiàn)數(shù)據(jù)的雙向綁定啡氢,View和ViewModel之間可以通過數(shù)據(jù)綁定實(shí)現(xiàn)雙向通信状囱。MVVM模式將視圖和業(yè)務(wù)邏輯分離,提高了代碼的可重用性和測試性倘是。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浪箭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辨绊,更是在濱河造成了極大的恐慌,老刑警劉巖匹表,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件门坷,死亡現(xiàn)場離奇詭異,居然都是意外死亡袍镀,警方通過查閱死者的電腦和手機(jī)默蚌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苇羡,“玉大人绸吸,你說我怎么就攤上這事。” “怎么了锦茁?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵攘轩,是天一觀的道長。 經(jīng)常有香客問我码俩,道長度帮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任稿存,我火速辦了婚禮笨篷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓣履。我一直安慰自己率翅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布袖迎。 她就那樣靜靜地躺著冕臭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓢棒。 梳的紋絲不亂的頭發(fā)上浴韭,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音脯宿,去河邊找鬼念颈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛连霉,可吹牛的內(nèi)容都是我干的榴芳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼跺撼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼窟感!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歉井,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤柿祈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哩至,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躏嚎,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年菩貌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卢佣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箭阶,死狀恐怖虚茶,靈堂內(nèi)的尸體忽然破棺而出戈鲁,到底是詐尸還是另有隱情,我是刑警寧澤嘹叫,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布婆殿,位于F島的核電站,受9級(jí)特大地震影響待笑,放射性物質(zhì)發(fā)生泄漏鸣皂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一暮蹂、第九天 我趴在偏房一處隱蔽的房頂上張望寞缝。 院中可真熱鬧,春花似錦仰泻、人聲如沸荆陆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽被啼。三九已至,卻和暖如春棠枉,著一層夾襖步出監(jiān)牢的瞬間浓体,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工辈讶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留命浴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓贱除,卻偏偏與公主長得像生闲,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子月幌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 1.objective-c常見面試題:1碍讯、**OC **語言的基本特點(diǎn)OC 語言是 C 語言的一個(gè)超集,只是在 C...
    LZM輪回閱讀 964評(píng)論 0 3
  • 1.Difference between shallow copy and deep copy? 淺復(fù)制和深復(fù)制的...
    用心在飛閱讀 991評(píng)論 0 9
  • 1.iOS 類(class)和結(jié)構(gòu)體(struct)有什么區(qū)別? Swift 中扯躺,類是引用類型捉兴,結(jié)構(gòu)體是值類型。值...
    iOS鑫閱讀 2,187評(píng)論 0 14
  • 最近由于換工作的原因录语,需要參加面試轴术,然后就到處收集了一些當(dāng)下的面試題供自己復(fù)習(xí)使用。下面就分享出來钦无,希望能夠幫到你...
    wuyukobe閱讀 2,124評(píng)論 3 26
  • 1. 空指針、野指針以及僵尸對(duì)象的理解盖袭,如何避免野指針錯(cuò)誤失暂。解答:內(nèi)存被釋放的對(duì)象為僵尸對(duì)象(不能再使用的對(duì)象)彼宠。...
    背包技術(shù)閱讀 617評(píng)論 0 1