2023年面試 整理出乙份高階iOS面試題

2021-10-13 17:56:42 字數 1809 閱讀 7946

1、nsarray與nsset的區別?

nsarray記憶體中儲存位址連續,而nsset不連續

nsset效率高,內部使用hash查詢;nsarray查詢需要遍歷

nsset通過anyobject訪問元素,nsarray通過下標訪問

2、nshashtable與nsmaptable?

nshashtable是nsset的通用版本,對元素弱引用,可變型別;可以在訪問成員時copy

nsmaptable是nsdictionary的通用版本,對元素弱引用,可變型別;可以在訪問成員時copy

(注:nshashtable與nsset的區別:nshashtable可以通過option設定元素弱引用/copyin,只有可變型別。但是新增物件的時候nshashtable耗費時間是nsset的兩倍。

nsmaptable與nsdictionary的區別:同上)

3、屬性關鍵字assign、retain、weak、copy

assign:用於基本資料型別和結構體。如果修飾物件的話,當銷毀時,屬性值不會自動置nil,可能造成野指標。

weak:物件引用計數為0時,屬性值也會自動置nil

retain:強引用型別,arc下相當於strong,但block不能用retain修飾,因為等同於assign不安全。

strong:強引用型別,修飾block時相當於copy。

4、weak屬性如何自動置nil的?

runtime會對weak屬性進行記憶體布局,構建hash表:以weak屬性物件記憶體位址為key,weak屬性值(weak自身位址)為value。當物件引用計數為0 dealloc時,會將weak屬性值自動置nil。

5、block的迴圈引用、內部修改外部變數、三種block

block強引用self,self強引用block

內部修改外部變數:block不允許修改外部變數的值,這裡的外部變數指的是棧中指標的記憶體位址。__block的作用是只要觀察到變數被block使用,就將外部變數在棧中的記憶體位址放到堆中。

三種block:nsglobalblack(全域性)、nsstackblock(棧block)、nsmallocblock(堆block)

6、kvo底層實現原理?手動觸發kvo?swift如何實現kvo?

kvo原理:當觀察乙個物件時,runtime會動態建立繼承自該物件的類,並重寫被觀察物件的setter方法,重寫的setter方法會負責在呼叫原setter方法前後通知所有觀察物件值得更改,最後會把該物件的isa指標指向這個建立的子類,物件就變成子類的例項。

如何手動觸發kvo:在setter方法裡,手動實現nsobject兩個方法:willchangevalueforkey、didchangevalueforkey

swift的kvo:繼承自nsobject的類,或者直接willset/didset實現。

7、categroy為什麼不能新增屬性?怎麼實現新增?與extension的區別?category覆蓋原類方法?多個category呼叫順序

9、對 runtime 的理解。——主要是方法呼叫時如何查詢快取,如何找到方法,找不到方法時怎麼**,物件的記憶體布局

oc中向物件傳送訊息時,runtime會根據物件的isa指標找到物件所屬的類,然後在該類的方法列表和父類的方法列表中尋找方法執行。如果在最頂層父類中沒找到方法執行,就會進行訊息**:method resoution(實現方法)、fast forwarding**發給其他物件)、normal forwarding(完整訊息**。可以**給多個物件)

10、runtime 中,sel和imp的區別?

每個類物件都有乙個方法列表,方法列表儲存方法名、方法實現、引數型別,sel是方法名(編號),imp指向方法實現的首位址

推薦乙份 Google 面試指南

其實,專案經驗固然重要,但是企業也知道,對於應屆畢業生,是很難有拿得出手的專案經驗出來的,畢竟缺乏實際工作經驗,哪怕你是優秀生,也大多是在理論知識上,所以,一般來說,企業針對應屆畢業生的面試,則主要考察基礎知識,而且越是大公司,越是注重基礎知識的考察。這就好比蓋房子,計算機方面的基礎就好比是地基,大...

另乙份有點難的 iOS 面試題

這一年的時間已經經歷了實習 校招好幾次的面試了,對於每個準備找工作或者已經找到工作的人來說,準備面試題都是一次提公升自己的機會。但比較慶幸的是,本人幾次面試所遇到的問題都比較簡單,沒有太多能讓自己有所提公升的內容,而網上流傳的各種面試題如今看來也沒有什麼太大的新意。因此我決定自己出乙份面試題,真正有...

第乙份實習職位面試

這是一家非網際網路公司。5月13日,帶著一顆忐忑的心來西安面試。一切都很簡略,沒有筆試,也不會遭鄙視。來之前只知道,這家公司總部在北京。我面試軟體事業部門的.net研發實習生,貌似他們就乙個部門,大約26人左右,成立時間不久,比較年輕,西安是乙個分部,系統大多與會計業務相關。面試過程也不是太長,大約...