iOS高級知識隨筆(面試)

有很長時間沒有整理這些東西了,隨手寄了一些小知識點漠另!以后會不間斷的更新,也歡迎大家隨時補(bǔ)充跃赚。

1笆搓、NSArray與NSSet的區(qū)別?

NSArray內(nèi)存中存儲地址連續(xù),而NSSet不連續(xù)

NSSet效率高满败,內(nèi)部使用hash查找窘奏;NSArray查找需要遍歷

NSSet通過anyObject訪問元素,NSArray通過下標(biāo)訪問


2葫录、NSHashTable與NSMapTable着裹?

NSHashTable是NSSet的通用版本,對元素弱引用米同,可變類型骇扇;可以在訪問成員時copy

NSMapTable是NSDictionary的通用版本,對元素弱引用,可變類型锈候;可以在訪問成員時copy

(注:NSHashTable與NSSet的區(qū)別:NSHashTable可以通過option設(shè)置元素弱引用/copyin饿序,只有可變類型。但是添加對象的時候NSHashTable耗費時間是NSSet的兩倍稍走。

NSMapTable與NSDictionary的區(qū)別:同上)


3、屬性關(guān)鍵字assign柴底、retain婿脸、weak、copy

assign:用于基本數(shù)據(jù)類型和結(jié)構(gòu)體柄驻。如果修飾對象的話狐树,當(dāng)銷毀時,屬性值不會自動置nil鸿脓,可能造成野指針抑钟。

weak:對象引用計數(shù)為0時,屬性值也會自動置nil

retain:強(qiáng)引用類型野哭,ARC下相當(dāng)于strong在塔,但block不能用retain修飾,因為等同于assign不安全拨黔。

strong:強(qiáng)引用類型蛔溃,修飾block時相當(dāng)于copy。


4蓉驹、weak屬性如何自動置nil的城榛?

Runtime會對weak屬性進(jìn)行內(nèi)存布局,構(gòu)建hash表:以weak屬性對象內(nèi)存地址為key态兴,weak屬性值(weak自身地址)為value狠持。當(dāng)對象引用計數(shù)為0 dealloc時,會將weak屬性值自動置nil瞻润。


5喘垂、Block的循環(huán)引用甜刻、內(nèi)部修改外部變量、三種block

block強(qiáng)引用self正勒,self強(qiáng)引用block內(nèi)部修改外部變量:block不允許修改外部變量的值得院,這里的外部變量指的是棧中指針的內(nèi)存地址。__block的作用是只要觀察到變量被block使用章贞,就將外部變量包裹在一個結(jié)構(gòu)體里然后在把棧中的內(nèi)存地址放到堆中祥绞。三種block:NSGlobalBlack(全局)、NSStackBlock(棧block)鸭限、NSMallocBlock(堆block)


6蜕径、KVO底層實現(xiàn)原理?手動觸發(fā)KVO败京?swift如何實現(xiàn)KVO兜喻?

KVO原理:當(dāng)觀察一個對象時,runtime會動態(tài)創(chuàng)建繼承自該對象的類赡麦,并重寫被觀察對象的setter方法朴皆,重寫的setter方法會負(fù)責(zé)在調(diào)用原setter方法前后通知所有觀察對象值得更改,最后會把該對象的isa指針指向這個創(chuàng)建的子類泛粹,對象就變成子類的實例遂铡。

如何手動觸發(fā)KVO:在setter方法里,手動實現(xiàn)NSObject兩個方法:willChangeValueForKey戚扳、didChangeValueForKey

swift的kvo:繼承自NSObject的類忧便,或者直接willset/didset實現(xiàn)族吻。


7帽借、categroy為什么不能添加屬性?怎么實現(xiàn)添加超歌?與Extension的區(qū)別砍艾?category覆蓋原類方法?多個category調(diào)用順序

Runtime初始化時categroy的內(nèi)存布局已經(jīng)確定巍举,沒有ivar脆荷,所以默認(rèn)不能添加屬性。

使用runtime的關(guān)聯(lián)對象懊悯,并重寫setter和getter方法蜓谋。

Extenstion編譯期創(chuàng)建,可以添加成員變量ivar炭分,一般用作隱藏類的信息桃焕。必須要有類的源碼才可以添加,如NSString就不能創(chuàng)建Extension捧毛。

category方法會在runtime初始化的時候copy到原來前面观堂,調(diào)用分類方法的時候直接返回让网,不再調(diào)用原類。如何保持原類也調(diào)用(http://www.reibang.com/p/40e28c9f9da5)师痕。

多個category的調(diào)用順序按照:Build Phases ->Complie Source 中的編譯順序溃睹。


8、load方法和initialize方法的異同胰坟∫蚱——主要說一下執(zhí)行時間,各自用途笔横,沒實現(xiàn)子類的方法會不會調(diào)用父類的惜犀?

load initialize 調(diào)用時機(jī) app啟動后,runtime初始化的時候 第一個方法調(diào)用前調(diào)用 調(diào)用順序 父類->本類->分類 父類->本類(如果有分類直接調(diào)用分類狠裹,本類不會調(diào)用) 沒實現(xiàn)子類的方法會不會調(diào)用父類的 否 是 是否沿用父類實現(xiàn) 否 是


9虽界、對 runtime 的理解√尾ぃ——主要是方法調(diào)用時如何查找緩存莉御,如何找到方法,找不到方法時怎么轉(zhuǎn)發(fā)俗冻,對象的內(nèi)存布局

OC中向?qū)ο蟀l(fā)送消息時礁叔,runtime會根據(jù)對象的isa指針找到對象所屬的類,然后在該類的方法列表和父類的方法列表中尋找方法執(zhí)行迄薄。如果在最頂層父類中沒找到方法執(zhí)行琅关,就會進(jìn)行消息轉(zhuǎn)發(fā):Method resoution(實現(xiàn)方法)、fast forwarding(轉(zhuǎn)發(fā)給其他對象)讥蔽、normal forwarding(完整消息轉(zhuǎn)發(fā)涣易。可以轉(zhuǎn)發(fā)給多個對象)


10冶伞、runtime 中新症,SEL和IMP的區(qū)別?

每個類對象都有一個方法列表,方法列表存儲方法名响禽、方法實現(xiàn)徒爹、參數(shù)類型,SEL是方法名(編號)芋类,IMP指向方法實現(xiàn)的首地址


11隆嗅、autoreleasepool的原理和使用場景?

若干個autoreleasepoolpage組成的雙向鏈表的棧結(jié)構(gòu),objc_autoreleasepoolpush侯繁、objc_autoreleasepoolpop胖喳、objc_autorelease

使用場景:多次創(chuàng)建臨時變量導(dǎo)致內(nèi)存上漲時,需要延遲釋放

autoreleasepoolpage的內(nèi)存結(jié)構(gòu):4k存儲大小


12巫击、Autorelase對象什么時候釋放禀晓?

在沒有手加Autorelease Pool的情況下精续,Autorelease對象是在當(dāng)前的runloop迭代結(jié)束時釋放的,而它能夠釋放的原因是系統(tǒng)在每個runloop迭代中都加入了自動釋放池Push和Pop粹懒。


13重付、Runloop與線程的關(guān)系?Runloop的mode? Runloop的作用凫乖?內(nèi)部機(jī)制确垫?

每一個線程都有一個runloop,主線程的runloop默認(rèn)啟動帽芽。

mode:主要用來指定事件在運行時循環(huán)的優(yōu)先級

作用:保持程序的持續(xù)運行删掀、隨時處理各種事件、節(jié)省cpu資源(沒事件休息釋放資源)导街、渲染屏幕UI


14披泪、iOS中使用的鎖、死鎖的發(fā)生與避免

@synchronized搬瑰、信號量款票、NSLock等

死鎖:多個線程同時訪問同一資源,造成循環(huán)等待泽论。GCD使用異步線程艾少、并行隊列


15、NSOperation和GCD的區(qū)別

GCD底層使用C語言編寫高效翼悴、NSOperation是對GCD的面向?qū)ο蟮姆庋b缚够。對于特殊需求,如取消任務(wù)鹦赎、設(shè)置任務(wù)優(yōu)先級谍椅、任務(wù)狀態(tài)監(jiān)聽,NSOperation使用起來更加方便钙姊。

NSOperation可以設(shè)置依賴關(guān)系毯辅,而GCD只能通過dispatch_barrier_async實現(xiàn)

NSOperation可以通過KVO觀察當(dāng)前operation執(zhí)行狀態(tài)(執(zhí)行/取消)

NSOperation可以設(shè)置自身優(yōu)先級(queuePriority)。GCD只能設(shè)置隊列優(yōu)先級(DISPATCH_QUEUE_PRIORITY_DEFAULT)煞额,無法在執(zhí)行的block中設(shè)置優(yōu)先級

NSOperation可以自定義operation如NSInvationOperation/NSBlockOperation,而GCD執(zhí)行任務(wù)可以自定義封裝但沒有那么高的代碼復(fù)用度

GCD高效沾谜,NSOperation開銷相對高


16膊毁、oc與js交互

攔截url

JavaScriptCore(只適用于UIWebView)

WKScriptMessageHandler(只適用于WKWebView)

WebViewJavaScriptBridge(第三方框架)


17、swift相比OC有什么優(yōu)勢基跑?

簡潔的語法自動做類型推斷

函數(shù)式編程的支持

可視化互動效果

報錯精準(zhǔn)

定義變量簡單


18婚温、struct、Class的區(qū)別

class可以繼承媳否,struct不可以

class是引用類型栅螟,struct是值類型

struct在function里修改property時需要mutating關(guān)鍵字修飾


19荆秦、訪問控制關(guān)鍵字(public、open力图、private步绸、filePrivate、internal)

public與open:public在module內(nèi)部中吃媒,class和func都可以被訪問/重載/繼承瓤介,外部只能訪問;而open都可以

private與filePrivate:private修飾class/func赘那,表示只能在當(dāng)前class源文件/func內(nèi)部使用刑桑,外部不可以被繼承和訪問;而filePrivate表示只能在當(dāng)前swift源文件內(nèi)訪問

internal:在整個模塊或者app內(nèi)都可以訪問募舟,默認(rèn)訪問級別祠斧,可寫可不寫

class可以繼承,struct不可以


20拱礁、OC與Swift混編

OC調(diào)用swift:import "工程名-swift.h” @objc

swift調(diào)用oc:橋接文件


21梁肿、map、filter觅彰、reduce吩蔑?map與flapmap的區(qū)別?

map:數(shù)組中每個元素都經(jīng)過某個方法轉(zhuǎn)換填抬,最后返回新的數(shù)組(xx.map({$0 * $0}))

flatmap:同map類似烛芬,區(qū)別在flatmap返回的數(shù)組不存在nil,并且會把optional解包飒责;而且還可以把嵌套的數(shù)組打開變成一個([[1,2],[2,3,4],[5,6]] ->[1,2,2,3,4,5,6])

filter:用戶篩選元素(xxx.filter({$0 > 25})赘娄,篩選出大于25的元素組成新數(shù)組)

reduce:把數(shù)組元素組合計算為一個值,并接收初始值()


22宏蛉、guard與defer

guard用于提前處理錯誤數(shù)據(jù)遣臼,else退出程序,提高代碼可讀性

defer延遲執(zhí)行拾并,回收資源揍堰。多個defer反序執(zhí)行,嵌套defer先執(zhí)行外層嗅义,后執(zhí)行內(nèi)層


23屏歹、try、try?與try!

try:手動捕捉異常

try?:系統(tǒng)幫我們處理之碗,出現(xiàn)異常返回nil蝙眶;沒有異常返回對應(yīng)的對象

try!:直接告訴系統(tǒng),該方法沒有異常褪那。如果出現(xiàn)異常程序會crash


24幽纷、@autoclosure:把一個表達(dá)式自動封裝成閉包

25式塌、throws與rethrows:throws另一個throws時,將前者改為rethrows


26友浸、App啟動優(yōu)化策略峰尝?main函數(shù)執(zhí)行前后怎么優(yōu)化

啟動時間 = pre-main耗時+main耗時

pre-main階段優(yōu)化:

刪除無用代碼

抽象重復(fù)代碼

+load方法做的事情延遲到initialize中,或者+load的事情不宜花費太多時間

減少不必要的framework尾菇,或者優(yōu)化已有framework

Main階段優(yōu)化

didFinishLauchingwithOptions里代碼延后執(zhí)行

首次啟動渲染的頁面優(yōu)化


27境析、crash防護(hù)?

unrecognized selector crash

KVO crash

NSNotification crash

NSTimer crash

Container crash(數(shù)組越界派诬,插nil等)

NSString crash (字符串操作的crash)

Bad Access crash (野指針)

UI not on Main Thread Crash (非主線程刷UI (機(jī)制待改善))

28劳淆、內(nèi)存泄露問題?

主要集中在循環(huán)引用問題中默赂,如block沛鸵、NSTime、perform selector引用計數(shù)問題缆八。

29曲掰、UI卡頓優(yōu)化?

30奈辰、架構(gòu)&設(shè)計模式

MVC設(shè)計模式介紹

MVVM介紹栏妖、MVC與MVVM的區(qū)別?

ReactiveCocoa的熱信號與冷信號

緩存架構(gòu)設(shè)計LRU方案

SDWebImage源碼奖恰,如何實現(xiàn)解碼

AFNetWorking源碼分析(觀看優(yōu)秀的框架源碼十分重要)

組件化的實施吊趾,中間件的設(shè)計

哈希表的實現(xiàn)原理?如何解決沖突


31瑟啃、數(shù)據(jù)結(jié)構(gòu)&算法

快速排序论泛、歸并排序

二維數(shù)組查找(每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序蛹屿。請完成一個函數(shù)屁奏,輸入這樣的一個二維數(shù)組和一個整數(shù),判斷數(shù)組中是否含有該整數(shù))

二叉樹的遍歷:判斷二叉樹的層數(shù)

單鏈表判斷環(huán)


32错负、計算機(jī)基礎(chǔ)

http與https坟瓢?socket編程?tcp湿颅、udp载绿?get與post?

tcp三次握手與四次握手

進(jìn)程與線程的區(qū)別

.....

33油航、你平時怎么解決網(wǎng)絡(luò)請求的依賴關(guān)系:當(dāng)一個接口的請求需要依賴于另一個網(wǎng)絡(luò)請求的結(jié)果

辦法1:線程:NSOperation 操作依賴和優(yōu)先級

[operationB addDependency:operationA]; // 操作B依賴于操作</pre>

辦法2:邏輯:在上一個網(wǎng)絡(luò)請求的響應(yīng)回調(diào)中進(jìn)行下一網(wǎng)絡(luò)請求的激活

34、你平時怎么解決網(wǎng)絡(luò)請求的依賴關(guān)系:當(dāng)一個接口的請求需要依賴于另一個網(wǎng)絡(luò)請求的結(jié)果

解析:這個涉及到簡單知識怀浆,可參考 http://www.360doc.com/content/17/0111/22/32626470_621879084.shtml


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谊囚,一起剝皮案震驚了整個濱河市怕享,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌镰踏,老刑警劉巖函筋,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奠伪,居然都是意外死亡跌帐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門绊率,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谨敛,“玉大人,你說我怎么就攤上這事滤否×忱辏” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵藐俺,是天一觀的道長炊甲。 經(jīng)常有香客問我,道長欲芹,這世上最難降的妖魔是什么卿啡? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮菱父,結(jié)果婚禮上颈娜,老公的妹妹穿的比我還像新娘。我一直安慰自己滞伟,他們只是感情好揭鳞,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梆奈,像睡著了一般野崇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亩钟,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天乓梨,我揣著相機(jī)與錄音,去河邊找鬼清酥。 笑死扶镀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焰轻。 我是一名探鬼主播臭觉,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蝠筑?” 一聲冷哼從身側(cè)響起狞膘,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎什乙,沒想到半個月后挽封,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡臣镣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年辅愿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忆某。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡点待,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出褒繁,到底是詐尸還是另有隱情亦鳞,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布棒坏,位于F島的核電站燕差,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坝冕。R本人自食惡果不足惜徒探,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喂窟。 院中可真熱鬧测暗,春花似錦、人聲如沸磨澡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稳摄。三九已至稚字,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厦酬,已是汗流浹背胆描。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留仗阅,地道東北人昌讲。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像减噪,于是被迫代替她去往敵國和親短绸。 傳聞我的和親對象是個殘疾皇子车吹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

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

  • 1、NSArray與NSSet的區(qū)別鸠按? NSArray內(nèi)存中存儲地址連續(xù)礼搁,而NSSet不連續(xù)NSSet效率高饶碘,內(nèi)部...
    羈擁_f357閱讀 502評論 0 1
  • 1目尖、NSArray與NSSet的區(qū)別? NSArray內(nèi)存中存儲地址連續(xù)扎运,而NSSet不連續(xù) NSSet效率高瑟曲,內(nèi)...
    小緈福閱讀 4,150評論 1 29
  • 一、基礎(chǔ)知識點 設(shè)計模式是什么豪治? 你知道哪些設(shè)計模式洞拨,并簡要敘述? 設(shè)計模式是一種編碼經(jīng)驗负拟,就是用比較成熟的邏輯去...
    軟件iOS開發(fā)閱讀 1,282評論 0 26
  • 久違的晴天烦衣,家長會。 家長大會開好到教室時掩浙,離放學(xué)已經(jīng)沒多少時間了花吟。班主任說已經(jīng)安排了三個家長分享經(jīng)驗。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,523評論 16 22
  • 創(chuàng)業(yè)是很多人的夢想厨姚,多少人為了理想和不甘選擇了創(chuàng)業(yè)來實現(xiàn)自我價值衅澈,我就是其中一個。 創(chuàng)業(yè)后谬墙,我由女人變成了超人今布,什...
    亦寶寶閱讀 1,811評論 4 1