iOS 面試記錄

1.組件化開(kāi)發(fā)的設(shè)計(jì)和使用

將應(yīng)用程序的功能分解為多個(gè)獨(dú)立的模塊或組件瞳遍,每個(gè)模塊負(fù)責(zé)一個(gè)特定的功能或業(yè)務(wù)邏輯闻妓,如用戶(hù)管理菌羽、網(wǎng)絡(luò)請(qǐng)求掠械、UI 組件等。
組件化的核心思想是降低模塊之間的耦合性注祖,使得每個(gè)模塊可以獨(dú)立存在和運(yùn)行猾蒂。模塊之間通過(guò)明確的接口(如協(xié)議、API)進(jìn)行通信是晨,而不直接依賴(lài)其他模塊的具體實(shí)現(xiàn)肚菠。
組件化的模塊是高度可重用的,能夠在多個(gè)項(xiàng)目或不同的應(yīng)用中使用罩缴,減少重復(fù)代碼的編寫(xiě)蚊逢,提高開(kāi)發(fā)效率。

2.Class類(lèi)的底層機(jī)構(gòu)是什么樣的

在oc中箫章,class 是一個(gè)指向objc_calss 結(jié)構(gòu)體的指針烙荷,objc_class結(jié)構(gòu)體定義了一個(gè)對(duì)象的布局,其核心結(jié)構(gòu)如下:

struct objc_class {
   Class isa;                   // 指向類(lèi)對(duì)象的指針
   Class superclass;            // 指向父類(lèi)的指針
   void *cache;                 // 方法緩存
   void *vtable;                // 虛函數(shù)表(可選)
   struct class_ro_t *ro;       // 只讀數(shù)據(jù)檬寂,包括類(lèi)名终抽、方法列表等
};

關(guān)鍵字段解析

  • isa 指正指向類(lèi)的元類(lèi),
  • supercalss 指針指向該類(lèi)的父類(lèi)桶至。如果該類(lèi)是根類(lèi)(如 NSObject)則為nil,這個(gè)字段用于實(shí)現(xiàn)類(lèi)的繼承機(jī)制
  • cache 用于緩存最近調(diào)用的方法昼伴,方法緩存的是一個(gè)哈希表結(jié)構(gòu),他可以加速放的查找過(guò)程镣屹,避免每次方法調(diào)用都遍歷整個(gè)方法列表圃郊,方法緩存是根據(jù)使用頻率動(dòng)態(tài)維護(hù)的
  • vtable 是一個(gè)可選的虛函數(shù)表,存儲(chǔ)了類(lèi)的虛函數(shù)地址女蜈,
  • ro(read-only Data) ro是一個(gè)指向class_ro_t結(jié)構(gòu)體的指針描沟,class_ro_t結(jié)構(gòu)體包含了與類(lèi)相關(guān)的只讀數(shù)據(jù)飒泻,例如類(lèi)名嗎,方法列表吏廉,協(xié)議列表泞遗,屬性列表等。

3.類(lèi)A 席覆,有個(gè)分類(lèi)史辙,分類(lèi)的方法和原有的的方法是怎么存儲(chǔ)的,如果多個(gè)分類(lèi)有同一個(gè)方法佩伤,怎么判斷誰(shuí)的優(yōu)先級(jí)更高聊倔?

每個(gè)類(lèi)都有個(gè)方法列表,存儲(chǔ)在class_ro_t *ro里面生巡,存儲(chǔ)了這個(gè)類(lèi)的所有方法耙蔑,包括實(shí)例方法和類(lèi)方法,當(dāng)你為某個(gè)類(lèi)創(chuàng)建一個(gè)分類(lèi)的時(shí)候并定義方法的時(shí)候孤荣,這些方法會(huì)被添加到該類(lèi)的方法列表中甸陌,當(dāng)分類(lèi)被加載時(shí),這個(gè)方法會(huì)被插入到類(lèi)的方法列表中盐股。
當(dāng)多個(gè)分類(lèi)定義了想通的方法名時(shí)钱豁,最后一個(gè)加載的分類(lèi)方法實(shí)現(xiàn)會(huì)覆蓋之前的實(shí)現(xiàn)。
分類(lèi)是按照他們被編譯和鏈接的順序一次加載的疯汁,最后加載的分類(lèi)方法會(huì)覆蓋之前的同名方法牲尺,且優(yōu)先級(jí)最高。
由于加載順序的不可控幌蚊,這種做法會(huì)導(dǎo)致方法的實(shí)現(xiàn)不可預(yù)測(cè)谤碳,最好創(chuàng)建分類(lèi)時(shí)確保方法名的唯一性。

4溢豆,常用的線(xiàn)程鎖有哪些

  • NSLock 互斥鎖蜒简,防止多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)。
  • NSRecursiveLock ,遞歸鎖沫换,允許同一線(xiàn)程多次獲取鎖而不會(huì)導(dǎo)致死鎖臭蚁,適用于遞歸調(diào)用。
  • NSCondition讯赏,是一種鎖和條件變量相結(jié)合的對(duì)象垮兑,用于線(xiàn)程間得通信,可以用來(lái)等待或發(fā)送信號(hào)來(lái)控制線(xiàn)程的執(zhí)行漱挎。
  • NSConditionLock系枪,是一種條件鎖,允許線(xiàn)程滿(mǎn)足某個(gè)條件時(shí)加鎖或者解鎖磕谅。
  • @synchronized oc 語(yǔ)法糖私爷,方便的在塊級(jí)作用域內(nèi)使用雾棺,可用于對(duì)象加鎖,確保只有一個(gè)線(xiàn)程在同一時(shí)間訪(fǎng)問(wèn)代碼塊
  • dispatch_semaphore GCD 的信號(hào)量機(jī)制衬浑,
  • OSSPinklock捌浩,自旋鎖,用于某些情況下工秩,存在優(yōu)先級(jí)反轉(zhuǎn)的問(wèn)題尸饺,已經(jīng)廢棄

5,block 有幾種助币,分別對(duì)應(yīng)什么使用場(chǎng)景

  • 全局block (Global block)通常用于不依賴(lài)外部變量的回調(diào)或處理邏輯浪听,比如常量的回調(diào)
void (^globalBlock)(void) = ^{
    NSLog(@"This is a global block.");
};
  • 棧block (Statck Block)
    當(dāng)block 捕獲了外部自動(dòng)變量,默認(rèn)創(chuàng)建在棧中眉菱,隨著作用于的結(jié)束而銷(xiāo)毀迹栓。
    適用于當(dāng)前作用域的的臨時(shí)操作,例如函數(shù)內(nèi)部的邏輯處理
  • 堆block (Heap Block)
    當(dāng)棧block 復(fù)制到堆中時(shí)俭缓,其生命周期克伊,不在受作用域的限制,直到不再有引用時(shí)釋放尔崔,
    適用于長(zhǎng)時(shí)間存活或者跨多個(gè)作用域使用的操作答毫,比如異步操作中的回調(diào)褥民,延遲執(zhí)行等

6.struct 和 class 的區(qū)別

  • 內(nèi)存分配 和存儲(chǔ)
    st是值類(lèi)型季春,通常存儲(chǔ)在棧上,賦值或者參數(shù)傳遞是是值傳遞
    class 是引用類(lèi)型消返,通常存儲(chǔ)在堆上载弄,賦值或者參數(shù)傳遞是地址的引用 ,通過(guò)引用計(jì)數(shù)進(jìn)行管理
  • 繼承 和 多態(tài)撵颊,
    st 不支持宇攻,不支持多態(tài)
    clas 支持,支持多態(tài)倡勇,可以用父類(lèi)的引用只想子類(lèi)實(shí)例
  • 使用場(chǎng)景
    st適用于數(shù)據(jù)模型逞刷,表示輕量級(jí)的數(shù)據(jù)結(jié)構(gòu)或者不需要繼承和復(fù)雜行為的模型,例如坐標(biāo)顏色形狀等
    class 適用于復(fù)雜的對(duì)象妻熊,特別哪些需要共享 修改夸浅,后者繼承多態(tài)的場(chǎng)景

7,swift 的消息派發(fā)方式有哪些

消息的派發(fā)方式主要有三種:直接派發(fā)、表派發(fā) 和 消息派發(fā)扔役。

  • 直接派發(fā)是最簡(jiǎn)單帆喇、最快的派發(fā)方式。編譯器在編譯時(shí)就確定了要調(diào)用的方法亿胸,并在運(yùn)行時(shí)直接調(diào)用這個(gè)方法坯钦,不需要任何額外的查找
    適用于 struct预皇、enum 以及用 final 修飾的 class 或 class 方法。這些類(lèi)型和方法在編譯時(shí)已經(jīng)確定婉刀,且不會(huì)被重寫(xiě)或繼承吟温。
  • 表派發(fā)通過(guò)虛函數(shù)表(V-Table)來(lái)實(shí)現(xiàn)。當(dāng)一個(gè)類(lèi)有繼承關(guān)系時(shí)突颊,編譯器會(huì)為其生成一個(gè)虛函數(shù)表溯街,這個(gè)表記錄了類(lèi)及其父類(lèi)的所有方法的指針。在運(yùn)行時(shí)洋丐,通過(guò)查找表來(lái)確定調(diào)用哪個(gè)方法呈昔。
    適用于沒(méi)有用 final 修飾的類(lèi)(class)或方法(非 final 方法),這些方法可能會(huì)被子類(lèi)重寫(xiě)友绝。
  • 消息派發(fā)主要存在于 Objective-C 的類(lèi)(@objc 修飾的類(lèi)或方法)中堤尾。它使用動(dòng)態(tài)消息傳遞機(jī)制,即在運(yùn)行時(shí)通過(guò)查找方法列表來(lái)確定要調(diào)用的方法迁客。這種方式是 Objective-C 中的默認(rèn)派發(fā)方式郭宝。
    適用于用 @objc 修飾的類(lèi)或方法,以及所有繼承自 Objective-C 的類(lèi)掷漱。這些方法可以在運(yùn)行時(shí)被替換或攔截(比如通過(guò) Method Swizzling)粘室。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卜范,隨后出現(xiàn)的幾起案子衔统,更是在濱河造成了極大的恐慌,老刑警劉巖海雪,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锦爵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡奥裸,警方通過(guò)查閱死者的電腦和手機(jī)险掀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)湾宙,“玉大人樟氢,你說(shuō)我怎么就攤上這事∠丽” “怎么了埠啃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)畦攘。 經(jīng)常有香客問(wèn)我霸妹,道長(zhǎng),這世上最難降的妖魔是什么知押? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任叹螟,我火速辦了婚禮鹃骂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罢绽。我一直安慰自己畏线,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布良价。 她就那樣靜靜地躺著寝殴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪明垢。 梳的紋絲不亂的頭發(fā)上蚣常,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音痊银,去河邊找鬼抵蚊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溯革,可吹牛的內(nèi)容都是我干的贞绳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼致稀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼冈闭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起抖单,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萎攒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后臭猜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體躺酒,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡押蚤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年蔑歌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揽碘。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡次屠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雳刺,到底是詐尸還是另有隱情劫灶,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布掖桦,位于F島的核電站本昏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏枪汪。R本人自食惡果不足惜涌穆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一怔昨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宿稀,春花似錦趁舀、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至罩锐,卻和暖如春奉狈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涩惑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工嘹吨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人境氢。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓蟀拷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親萍聊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子问芬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • 近期整理的iOS面試題。不定期更新中寿桨。如有問(wèn)題此衅,歡迎斧正。 派發(fā) Swift 有三種派發(fā)方式 1靜態(tài)派發(fā) 2消息派...
    程序狗旭旭旭閱讀 1,612評(píng)論 0 4
  • 1.一個(gè)NSObject對(duì)象占用多少內(nèi)存亭螟? 64bit: sizeof 也是以8字節(jié)對(duì)齊,是個(gè)運(yùn)算符直接傳類(lèi)型計(jì)算...
    流星閣閱讀 1,796評(píng)論 0 10
  • (答案不唯一挡鞍,僅供參考,文章最后有福利) 一. iOS面試題---UI相關(guān):事件傳遞预烙,圖像顯示墨微,性能優(yōu)化,離屏渲染...
    ios南方閱讀 2,678評(píng)論 0 12
  • iOS面試題 [toc] 一扁掸、設(shè)計(jì)基本原則 簡(jiǎn)述六大設(shè)計(jì)基本原則(也稱(chēng) SOLID 五大原則) 單一職責(zé)原則 (S...
    JamieChen閱讀 603評(píng)論 0 6
  • 畢業(yè)好幾年了翘县,上周發(fā)送了簡(jiǎn)歷給騰訊,參加了騰訊面試谴分。具體部門(mén)這邊就不說(shuō)了锈麸。這次面試還是收獲到了很多。 一面電話(huà)面試...
    安東_Ace閱讀 6,614評(píng)論 8 44