iOS面試前的準(zhǔn)備

在iOS行業(yè)如此飽和的今天,跳槽是需要勇氣的(ps裸辭)空镜,如此就要做好充足的準(zhǔn)備浩淘。

怎么大風(fēng)越狠,我心越蕩

保持信心吴攒,一路向前张抄。
生于憂患死于安樂(lè),這句話還是很有道理的洼怔。
廢話不多說(shuō)了署惯,還是直接來(lái)點(diǎn)實(shí)際的,如下是我準(zhǔn)備的一些問(wèn)題及相應(yīng)的個(gè)人理解(集各路英雄豪杰的總結(jié))镣隶,也是覺(jué)得面試官會(huì)問(wèn)的技術(shù)點(diǎn):

一. loadinitialize的異同

load類(lèi)方法是類(lèi)加載進(jìn)內(nèi)存的時(shí)候調(diào)用一次极谊,分類(lèi)中若實(shí)現(xiàn)了load方法,也會(huì)被調(diào)用矾缓,且當(dāng)前類(lèi)的load方法會(huì)先調(diào)用怀酷,分類(lèi)中的load方法后調(diào)用,不支持子類(lèi)重寫(xiě)嗜闻。
initialize是類(lèi)在第一次使用時(shí)會(huì)調(diào)用一次蜕依,調(diào)用其子類(lèi)時(shí),父類(lèi)的initialize會(huì)被先調(diào)用琉雳,支持重寫(xiě)样眠。
在這兩個(gè)方法中都不建議做一些負(fù)載的操作,以防止程序運(yùn)行或加載時(shí)出現(xiàn)阻塞的現(xiàn)象翠肘。

二.GCDNSOperationQueue在實(shí)際項(xiàng)目中如何進(jìn)行選擇

首先NSOperationQueue有如下的一些特新

  • 取消某個(gè)操作檐束,調(diào)用cancel方法,會(huì)設(shè)置對(duì)象內(nèi)的標(biāo)志位束倍,用以表明下次任務(wù)不需執(zhí)行被丧。
  • 可以指定操作間的依賴(lài)關(guān)系。
  • 通過(guò)KVO監(jiān)控NSOperation對(duì)象的屬性绪妹,可以判斷任務(wù)是否取消及任務(wù)是否已完成甥桂。
  • 指定操作的優(yōu)先級(jí)。
  • 重用NSOperation對(duì)象邮旷,實(shí)現(xiàn)自定義操作任務(wù)黄选。

然而GCD也有它的優(yōu)勢(shì),主要內(nèi)部是基于C語(yǔ)音的一套封裝婶肩,調(diào)用的方法更底層办陷,運(yùn)行的速度也會(huì)更快貌夕。如果需要用到異步線程加載一些任務(wù),且不需要用到NSOperation的那些特性民镜,首選還是用GCD的啡专。
GCD也有自己的特性:

  • 通過(guò)Dispatch Group機(jī)制,根據(jù)系統(tǒng)資源來(lái)執(zhí)行任務(wù)制圈。
  • 運(yùn)用Dispatch Barrier特性植旧,保證寫(xiě)入數(shù)據(jù)的線程安全。
  • 運(yùn)用Dispatch Once來(lái)創(chuàng)建多線程下安全的單例离唐。

兩個(gè)的相同點(diǎn)都是操作隊(duì)列,實(shí)現(xiàn)多線程任務(wù)管理问窃。

三. UITableView的優(yōu)化(防止卡頓)

1.主線程是用來(lái)更新UI的亥鬓,若來(lái)處理與UI更新無(wú)關(guān)的事情,就會(huì)出現(xiàn)卡頓域庇。(值得注意)
2.將計(jì)算cell高度的過(guò)程在獲取數(shù)據(jù)時(shí)就直接計(jì)算保存好嵌戈,代理方法需要的時(shí)候,直接從模型中獲取听皿。
3.圖片的部分最好做緩存熟呛,避免讀I/O操作。
4.網(wǎng)絡(luò)加載下來(lái)的圖片尺寸最好跟顯示的frame尺寸匹配尉姨,避免控件去壓縮圖片庵朝。
5.cell的復(fù)用機(jī)制。
6.避免設(shè)置控件的圓角又厉,防止離屏渲染九府。
7.避免設(shè)置控件的透明度alpha
8.對(duì)于UILabel的顯示覆致,避免設(shè)置富文本侄旬。
9.UI的布局最好不要用Xib和SB,反正系統(tǒng)做一些不必要的操作煌妈,最好手動(dòng)布局儡羔。
10.避免代理方法里面文字size的計(jì)算。

四.weak的內(nèi)部實(shí)現(xiàn)

weak表明屬性是一種非擁有關(guān)系璧诵,為這種屬性設(shè)置新值時(shí)汰蜘,設(shè)置方法既不保留新值,也不釋放舊值腮猖。此特性與assign類(lèi)似鉴扫,但是當(dāng)所指的對(duì)象的引用計(jì)數(shù)為0時(shí),會(huì)執(zhí)行dealloc操作,將weak屬性設(shè)置為nil
runtime特質(zhì)罐脊,系統(tǒng)會(huì)將所有weak屬性存在一個(gè)hash表中,將weak屬性所指的對(duì)象的內(nèi)存地址作為key唐片,當(dāng)weak所指向的對(duì)象被清空時(shí)莱预,系統(tǒng)會(huì)通過(guò)清空對(duì)象的內(nèi)存地址key柠掂,從hash表中獲取weak屬性,將其賦值為nil依沮。

五.copy關(guān)鍵字怎么用

1.copy特質(zhì):父類(lèi)指針可以指向子類(lèi)對(duì)象涯贞,為了保持屬性不受外界的影響,無(wú)論外面給我傳的是可變的或不可變的對(duì)象危喉,都會(huì)保持一份不可變數(shù)據(jù)的副本宋渔。
2.strong特質(zhì):當(dāng)不可變的對(duì)象指向可變的子類(lèi)對(duì)象時(shí),只是增加了當(dāng)前對(duì)象的引用計(jì)數(shù)辜限,可變的對(duì)象和不可變的對(duì)象指向同樣的地址空間皇拣,當(dāng)可變對(duì)象的值發(fā)生變化時(shí),同時(shí)會(huì)影響不可變的對(duì)象薄嫡。
copy此特質(zhì)所表達(dá)的所屬關(guān)系與strong類(lèi)似氧急。然而設(shè)置方法并不保留新值,而是將其“拷貝”毫深,當(dāng)屬性的類(lèi)型為NSString時(shí)吩坝,經(jīng)常用此特質(zhì)來(lái)保護(hù)其封裝性,因?yàn)閭鬟f給設(shè)置方法的新值有可能指向NSMutableString類(lèi)的實(shí)例哑蔫,這個(gè)類(lèi)是NSString的子類(lèi)钉寝,表示一種可修改其值的字符串,此時(shí)若是不拷貝字符串闸迷,那么設(shè)置完屬性之后瘩蚪,字符串的值就可能在對(duì)象不知情的情況下被篡改。所以稿黍,這時(shí)就要拷貝一份不可變的字符串疹瘦,確保對(duì)象中的字符串的值不被無(wú)意間改動(dòng)。只要實(shí)現(xiàn)所用的對(duì)象是可變的巡球,就應(yīng)該在設(shè)置新屬性值時(shí)拷貝一份言沐。

六.事件的傳遞和響應(yīng)

當(dāng)一個(gè)事件發(fā)生后,事件會(huì)從父控件傳給子控件,也就是由UIApplication->UIWindow -> UIView -> initial view,以上就是事件的傳遞,也就是尋找最合適的view的過(guò)程.
事件的響應(yīng),首先看initial view能否處理這個(gè)事件,如果不能則會(huì)將事件給其上級(jí)的視圖(initial viewsuperView);如果上級(jí)視圖任然無(wú)法處理則會(huì)繼續(xù)往上傳遞,一直傳遞到視圖控制器view controller,首先判斷視圖控制器的根視圖view是否能處理此事件,如果不能則接著判斷該視圖控制器能否處理此事件,如果還是不能則繼續(xù)向上傳遞,(對(duì)于第二個(gè)視圖控制器本身還在另一個(gè)視圖控制器中,則繼續(xù)交給父視圖控制器的根視圖,如果根視圖不能處理則交給父視圖控制器處理),一直到window,如果window還是不能處理此事件則繼續(xù)交給UIApplication去處理,如果最后UIApplication還是不能處理此事件則將其丟棄.
區(qū)別:事件的傳遞是從上到下(父控件到子控件),事件的響應(yīng)是從下到上(順澤響應(yīng)鏈條向上傳遞),子控件到父控件.

七.動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別

在實(shí)際的編程過(guò)程中,通常會(huì)把一些公用的函數(shù)制作成函數(shù)庫(kù),供其它程序使用,一是提高了代碼的復(fù)用,二則提高了核心技術(shù)的保密程度.所以在實(shí)際的項(xiàng)目中經(jīng)常會(huì)使用到函數(shù)庫(kù),即函數(shù)庫(kù)又分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù).這里所謂的動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)是相對(duì)編譯期和運(yùn)行期的.
靜態(tài)庫(kù)在程序編譯時(shí)會(huì)被鏈接到目標(biāo)代碼中,程序運(yùn)行時(shí)將不再需要改靜態(tài)庫(kù).
動(dòng)態(tài)庫(kù)在程序編譯期間不會(huì)被鏈接到目標(biāo)代碼中,只是在程序運(yùn)行時(shí)才被載入,在程序運(yùn)行期間還需要?jiǎng)討B(tài)庫(kù)的存在.

八.runtime的介紹

runtime是一套底層C語(yǔ)言的API,包含許多強(qiáng)大的C語(yǔ)言函數(shù),OC的函數(shù)調(diào)用,底層都會(huì)調(diào)用runtime函數(shù).
作用:可以獲取當(dāng)前對(duì)象的所有成員變量,方法名;可以動(dòng)態(tài)的給對(duì)象添加屬性和方法.利用黑魔法(Method Swizzling)交換兩個(gè)方法的實(shí)現(xiàn)等.
objc_setAssociatedObject給關(guān)聯(lián)對(duì)象添加屬性
objc_getAssociatedObject獲取關(guān)聯(lián)對(duì)象的屬性

九.什么時(shí)候會(huì)報(bào)unrecognized selector的異常

objc在向一個(gè)對(duì)象發(fā)送消息時(shí),runtime庫(kù)會(huì)根據(jù)對(duì)象的isa指針找到該對(duì)象實(shí)際所屬的類(lèi),然后在該類(lèi)中的方法列表及其父類(lèi)的方法列表中尋找方法的運(yùn)行,如果最頂層的方法中依然找不到相應(yīng)的方法時(shí),程序在運(yùn)行時(shí)會(huì)掛掉同時(shí)拋出異常unrecognized selector sent to XXX.但是在這之前,objc的運(yùn)行時(shí)會(huì)給出三次拯救程序奔潰的的機(jī)會(huì):
1.Method resolution
objc運(yùn)行時(shí)會(huì)調(diào)用+resolveInstanceMethod:+resolveClassMethod:,讓你有機(jī)會(huì)提供一個(gè)函數(shù)實(shí)現(xiàn).如果你添加了函數(shù),運(yùn)行系統(tǒng)會(huì)重新啟動(dòng)一次消息發(fā)送的過(guò)程.否則,運(yùn)行時(shí)會(huì)移到下一步,消息轉(zhuǎn)發(fā)(message Forwarding)
2.Fast forwarding
如果目標(biāo)對(duì)象實(shí)現(xiàn)了-forwardingTargetForSelector:,runtime這時(shí)就會(huì)調(diào)用這個(gè)方法,給你把消息轉(zhuǎn)發(fā)到其它對(duì)象的機(jī)會(huì).只要這個(gè)方法返回的不是nil和self,整個(gè)消息發(fā)送的過(guò)程就會(huì)重啟,發(fā)送的對(duì)象就會(huì)變成你返回的那個(gè)對(duì)象.否則,就會(huì)繼續(xù)Normal Forwarding.
3.Normal Forwarding
這一步是runtime最后一次給你挽救的機(jī)會(huì),首先它會(huì)發(fā)送-methodSignatureForSelector:消息獲得函數(shù)的參數(shù)和返回值類(lèi)型.如果-methodSignatureForSelector:返回的是nil,runtime就會(huì)發(fā)出-doesNotRecognizeSelector:消息,程序這時(shí)也就掛掉了.如果返回了一個(gè)函數(shù)簽名,runtime就是創(chuàng)建一個(gè)NSIvocation對(duì)象并發(fā)送-forwardInvocation:消息給目標(biāo)對(duì)象.

十.UIViewCALayer的區(qū)別和聯(lián)系

1.UIView可以響應(yīng)事件,CALayer不可以
UIView繼承自UIResponder,具有響應(yīng)事件的能力.
2.UIView主要是對(duì)顯示內(nèi)容的管理而CALayer主要是側(cè)重對(duì)顯示的繪制.
3.在iOS動(dòng)畫(huà)的時(shí)候,修改非RootLayer的屬性會(huì)默認(rèn)產(chǎn)生隱式動(dòng)畫(huà),而修改UIView則不會(huì).

目前先整理這些,貌似都是些概率的東西,后續(xù)待繼續(xù)更新...
若有好的面試題目,待各位在評(píng)論中指出,表示會(huì)及時(shí)更新上去.自己也會(huì)在平時(shí)的開(kāi)發(fā)中多積累一些...

整理多了,也是一份不錯(cuò)的筆記...

收獲自己,分享大家...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酣栈,隨后出現(xiàn)的幾起案子险胰,更是在濱河造成了極大的恐慌,老刑警劉巖矿筝,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件起便,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)榆综,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)妙痹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鼻疮,你說(shuō)我怎么就攤上這事怯伊。” “怎么了判沟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵耿芹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我挪哄,道長(zhǎng)吧秕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任迹炼,我火速辦了婚禮寇甸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疗涉。我一直安慰自己,他們只是感情好吟秩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布咱扣。 她就那樣靜靜地躺著,像睡著了一般涵防。 火紅的嫁衣襯著肌膚如雪闹伪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天壮池,我揣著相機(jī)與錄音偏瓤,去河邊找鬼。 笑死椰憋,一個(gè)胖子當(dāng)著我的面吹牛厅克,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播橙依,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼证舟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了窗骑?” 一聲冷哼從身側(cè)響起女责,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎创译,沒(méi)想到半個(gè)月后抵知,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年刷喜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了残制。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吱肌,死狀恐怖痘拆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氮墨,我是刑警寧澤纺蛆,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站规揪,受9級(jí)特大地震影響桥氏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜猛铅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一字支、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奸忽,春花似錦堕伪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至疙筹,卻和暖如春富俄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背而咆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工霍比, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暴备。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓悠瞬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親涯捻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阁危,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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

  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,152評(píng)論 30 470
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評(píng)論 25 707
  • 在參加工作后混弥,我一直有個(gè)習(xí)慣趴乡,就是睡前看書(shū)对省。我會(huì)在枕頭邊放上一疊書(shū),上床后晾捏,捧上一本書(shū)蒿涎,看上三四頁(yè),然后困了惦辛,就熄...
    小錢(qián)兒可虎了閱讀 207評(píng)論 0 2
  • 新項(xiàng)目下周就要上線劳秋,所以這段時(shí)間一直在關(guān)注冷啟動(dòng)的話題。我沒(méi)有正兒八經(jīng)做過(guò)用戶或產(chǎn)品運(yùn)營(yíng)胖齐,但深知一款新產(chǎn)品上線玻淑,在...
    涂涂小排屋閱讀 757評(píng)論 1 5
  • 1. 打開(kāi)模擬器 2.找到Hardware 打開(kāi) 3. 選中Keyboard 4 第二個(gè)勾號(hào) 勾掉
    騎驢去旅行閱讀 567評(píng)論 0 0