2018年iOS面試真題(一)

3月面試真題

本套真題是筆者的一位朋友去小蘇蘇面試分享的,答案由筆者及其朋友總結(jié),如有問題請(qǐng)及時(shí)糾正。

1.內(nèi)存管理
內(nèi)存管理:是對(duì)內(nèi)存資源進(jìn)行優(yōu)化。內(nèi)存管理三種方式:ARC(自動(dòng)內(nèi)存管理)、MRC(手動(dòng)內(nèi)存管理)、內(nèi)存池。
(1)、MRC(MannulReference Counting)手動(dòng)引用計(jì)數(shù) ,iOS 5.0之前采用的內(nèi)存管理機(jī)制,需要程序員手動(dòng)的創(chuàng)建對(duì)象申請(qǐng)內(nèi)存,然后再手動(dòng)的釋放。
MRC管理內(nèi)存的原則:誰創(chuàng)建,誰釋放,誰引用,誰管理。
在使用MRC時(shí),當(dāng)創(chuàng)建或引用一個(gè)對(duì)象的時(shí)候,需要向她發(fā)送alloc、copy、retain消息,當(dāng)釋放該對(duì)象時(shí)需要發(fā)送release消息,當(dāng)對(duì)象引用計(jì)數(shù)為0時(shí),系統(tǒng)將釋放該對(duì)象。
(2)、ARC(Automatic Reference Counting)自動(dòng)引用計(jì)數(shù)。iOS 5.0之后采用的內(nèi)存管理機(jī)制。在代碼中自動(dòng)加入了retain/release,由編譯器自動(dòng)管理計(jì)數(shù)+1和釋放。
在使用ARC時(shí),需要設(shè)置正確的property屬性(strong、weak、copy關(guān)鍵字),不然可能出現(xiàn)內(nèi)存泄露。
(3)、內(nèi)存池:autorelease是在創(chuàng)建對(duì)象的時(shí)候?qū)懙?,表示加入自?dòng)釋放池,當(dāng)釋放池銷毀時(shí),才調(diào)用引用計(jì)數(shù)-1。
2.哪些類和UIView有繼承關(guān)系(直接或間接的父類、子類關(guān)系)

IOS類繼承關(guān)系圖

3.OC的消息機(jī)制
參考消息機(jī)制
4.優(yōu)秀的設(shè)計(jì)原則
高內(nèi)聚、低耦合
5.OC或swift的冒泡算法


    NSMutableArray *numbers = [NSMutableArray arrayWithObjects:@"17",@"28",@"36",@"15",@"39", nil];
    NSLog(@"排序前%@",numbers);
    for (int i = 0; i < 5 - 1; i++) {
        //比較的躺數(shù)
        for (int j = 0; j < 5 - 1 - i; j++) {
            //比較的次數(shù)
            if ([numbers[j] intValue] > [numbers[j + 1] intValue]) {
                //這里為升序排序
                int temp = [numbers[j] intValue];
                numbers[j] = numbers[j + 1];
                //OC中的數(shù)組只能存儲(chǔ)對(duì)象,所以這里轉(zhuǎn)換成string對(duì)象
                numbers[j + 1] = [NSString stringWithFormat:@"%d",temp];
            }
        }
    }
    NSLog(@"排序后%@",numbers);

6.線程問題

打印線程

7.為什么代理要使用關(guān)鍵字weak,代理里面的delegate和dataSource有什么區(qū)別
(1)防止循環(huán)引用,weak會(huì)在對(duì)象引用計(jì)數(shù)為0的時(shí)候自動(dòng)釋放。具體參考iOS 為什么要用weak修飾代理。
(2)datasource協(xié)議里面東西是跟內(nèi)容有關(guān)的,主要是cell的構(gòu)造函數(shù),各種屬性。
delegate協(xié)議里面的方法主要是操作相關(guān)的,移動(dòng)編輯之類的,你都寫上要用什么方法自己去翻就是了 。
8.什么時(shí)候會(huì)報(bào)unrecognized selector錯(cuò)誤?iOS用那些機(jī)制來避免走到這一步
(1)、
對(duì)象未實(shí)現(xiàn)該方法。
對(duì)象已經(jīng)被釋放。
(2)、

  • 使用[id respondsToSelector:]進(jìn)行判斷。
  • Method resolution:objc運(yùn)行時(shí)會(huì)調(diào)用+resolveInstanceMethod:或者 +resolveClassMethod:,讓你有機(jī)會(huì)提供一個(gè)函數(shù)實(shí)現(xiàn)。如果你添加了函數(shù),那運(yùn)行時(shí)系統(tǒng)就會(huì)重新啟動(dòng)一次消息發(fā)送的過程,否則 ,運(yùn)行時(shí)就會(huì)移到下一步,消息轉(zhuǎn)發(fā)(Message Forwarding)。返回Nil和self,去調(diào)用第三步methodSignatureForSelector和forwarInvocation;返回receiver,如果receiver有響應(yīng)就直接處理,如果沒有就去對(duì)應(yīng)的對(duì)象內(nèi)去調(diào)用第三步;調(diào)用子類的函數(shù),子類沒有進(jìn)行這幾個(gè)方法的重載,在父類處理時(shí)返回子類,會(huì)死循環(huán)。
  • Fast forwarding:如果目標(biāo)對(duì)象實(shí)現(xiàn)了-forwardingTargetForSelector:,Runtime 這時(shí)就會(huì)調(diào)用這個(gè)方法,給你把這個(gè)消息轉(zhuǎn)發(fā)給其他對(duì)象的機(jī)會(huì)。 只要這個(gè)方法返回的不是nil和self,整個(gè)消息發(fā)送的過程就會(huì)被重啟,當(dāng)然發(fā)送的對(duì)象會(huì)變成你返回的那個(gè)對(duì)象。否則,就會(huì)繼續(xù)Normal Fowarding。 這里叫Fast,只是為了區(qū)別下一步的轉(zhuǎn)發(fā)機(jī)制。因?yàn)檫@一步不會(huì)創(chuàng)建任何新的對(duì)象,但下一步轉(zhuǎn)發(fā)會(huì)創(chuàng)建一個(gè)NSInvocation對(duì)象,所以相對(duì)更快點(diǎn)。
  • Normal forwarding:這一步是Runtime最后一次給你挽救的機(jī)會(huì)。首先它會(huì)發(fā)送-methodSignatureForSelector:消息獲得函數(shù)的參數(shù)和返回值類型。如果-methodSignatureForSelector:返回nil,Runtime則會(huì)發(fā)出-doesNotRecognizeSelector:消息,程序這時(shí)也就掛掉了。如果返回了一個(gè)函數(shù)簽名,Runtime就會(huì)創(chuàng)建一個(gè)NSInvocation對(duì)象并發(fā)送-forwardInvocation:消息給目標(biāo)對(duì)象。
    9.介紹下分類,說下能用分類做什么?內(nèi)部是如何實(shí)現(xiàn)的?分類中如果實(shí)現(xiàn)了類的相同方法會(huì)出現(xiàn)什么情況?
    category:是為已經(jīng)存在的類添加方法。
    功能:
    a)可以把不同的功能組織到不同的category里
    b)可以有多個(gè)開發(fā)者共同完成一個(gè)類
    c)可以按需加載想要的category等等。
    d)減少文件數(shù)量。
    內(nèi)部實(shí)現(xiàn):
    category的方法沒有完全替換掉原來類已經(jīng)有的方法,而是和原有方法共存,并排在了原有方法的前面。編譯時(shí)是按照順序查找的,因此會(huì)執(zhí)行category的方法。
    10.寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)
#define MIN(a,b) ((a)>(b)?(b):(a))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最全的iOS面試題及答案 iOS面試小貼士 ———————————————回答好下面的足夠了-----------...
    大羅Rnthking閱讀 1,041評(píng)論 0 2
  • 面試題參考1 : 面試題[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios閱讀 1,807評(píng)論 0 4
  • 把網(wǎng)上的一些結(jié)合自己面試時(shí)遇到的面試題總結(jié)了一下,以后有新的還會(huì)再加進(jìn)來。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,657評(píng)論 0 20
  • 莽原起霽風(fēng), 四望探幽叢。 漠漠空林下, 萋萋深澗中。 暗香侵竹杖, 擢影滿籃籠。 素蕊沾鋤柄, 斜陽共晚鴻。
    滄海冰心閱讀 211評(píng)論 0 5
  • 首先在開頭說,隨著年紀(jì)增長,越來越喜歡直接進(jìn)入主題,不加任何文藝。 江南真是美,春天綠來的早,花開的滿,姑娘都是瘦...
    我是Sylvia閱讀 235評(píng)論 0 0

友情鏈接更多精彩內(nèi)容