面試題



一。送分題

1.冒泡排序


二。拓展題

1.內(nèi)存管理 側(cè)重點(diǎn)是mrc下的內(nèi)存管理機(jī)制

MRC,即Manual Reference Counting,在MRC下,我們根據(jù)對象的引用計(jì)數(shù)器來進(jìn)行內(nèi)存管理的.每個(gè)對象剛被創(chuàng)建的時(shí)候,默認(rèn)的引用計(jì)數(shù)器為1,當(dāng)引用計(jì)數(shù)器為0的時(shí)候,該對象就被銷毀.我們可以把retain,alloc,new,copy看做是對引用計(jì)數(shù)+1操作,需要在適當(dāng)?shù)奈恢谜{(diào)用release或者autorelease使其-1保證沒有內(nèi)存泄漏. 內(nèi)存管理的原則,誰創(chuàng)建,誰release;誰retain,誰release.

2.多線程 側(cè)重點(diǎn)是gcd中同步異步還有queue的類型 dispatch_group
在線程中做線程安全用到的方式 同步鎖等等

一、術(shù)語:同步、異步、并發(fā)、串行
1、同步和異步?jīng)Q定了要不要開啟新的線程
同步:在當(dāng)前線程執(zhí)行,不開啟新線程
dispatch_sync,同步操作,派發(fā)到任何隊(duì)列,都不會(huì)開啟新線程。
異步:在新的線程中執(zhí)行任務(wù),具備開啟新線程的能力
dispatch_async,異步操作,會(huì)創(chuàng)建一個(gè)線程。如果派發(fā)到主線程中,則會(huì)在主線程中執(zhí)行。
2、并發(fā)和串行決定了任務(wù)的執(zhí)行方式
并發(fā)隊(duì)列 :多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行
串行隊(duì)列 :一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù)
特殊隊(duì)列主隊(duì)列 : 用來執(zhí)行主線程上的操作任務(wù)

3.runloop 側(cè)重點(diǎn)是runloop的幾種類型以及與NSTimer的結(jié)合

4.跟音視頻的結(jié)合,如何實(shí)現(xiàn)一個(gè)視頻播放進(jìn)度精準(zhǔn)的播放時(shí)間顯示?

  1. 視頻時(shí)間戳
    pts = inc++ *(1000/fps); 其中inc是一個(gè)靜態(tài)的,初始值為0,每次打完時(shí)間戳inc加1.
    在ffmpeg,中的代碼
    pkt.pts= m_nVideoTimeStamp++ * (m_VCtx->time_base.num * 1000 / m_VCtx->time_base.den)
  1. 音頻時(shí)間戳
    pts = inc++ * (frame_size * 1000 / sample_rate)
    在ffmpeg中的代碼為
    pkt.pts= m_nAudioTimeStamp++ * (m_ACtx->frame_size * 1000 / m_ACtx->sample_rate);

5.如何實(shí)現(xiàn)一個(gè)具有緩存上限、緩存清除的內(nèi)存緩存模型

內(nèi)存中緩存
內(nèi)存中緩存時(shí),使用一個(gè)NSMutabledictionary存儲(chǔ)key-value值,
當(dāng),存緩存時(shí),使用 setObject:forKey的方法存對象,讀取時(shí)使用
objectForKey:讀取對象
磁盤中緩存
內(nèi)存中存儲(chǔ)了一個(gè)key值的value之后,需要在磁盤中保存此份對象。首先將該對象通過歸檔轉(zhuǎn)變成一個(gè)NSData,然后根據(jù)關(guān)鍵字創(chuàng)建磁盤中的文件,將該數(shù)據(jù)NSData寫入該文件中即可。
對于在NSMutableiDictionary中未曾讀到對象時(shí),可以根據(jù)俄key索引本地磁盤,如果存在該文件,那么將該文件通過解檔還原成對象,同時(shí)在NSMutabledictionary中存儲(chǔ)一次該對象即可。

6.導(dǎo)致內(nèi)存crash的問題都有哪些類型

一.訪問了一個(gè)已經(jīng)被釋放的對象
二、訪問數(shù)組類對象越界或插入了空對象
三、訪問了不存在的方法
四、字節(jié)對齊
五、堆棧溢出
六、多線程并發(fā)操作

7.如何獲取當(dāng)前設(shè)備的幀率

CADisplayLink是一個(gè)定時(shí)器,是一個(gè)刷新頻率和屏幕刷新率相同的定時(shí)器。
我們可以通過這個(gè)來計(jì)算當(dāng)前幀數(shù)

8.如何監(jiān)測當(dāng)前頁面的卡頓

主要思路:通過監(jiān)測Runloop的kCFRunLoopAfterWaiting,用一個(gè)子線程去檢查,一次循環(huán)是否時(shí)間太長。其中主要涉及到了runloop的原理。關(guān)于整個(gè)原理:深入理解RunLoop講解的比較仔細(xì)。



三。技術(shù)題

1.Runtime里面,isa指針的指向問題?

IMP指針是指向?qū)崿F(xiàn)函數(shù)的指針,通過SEL取得IMP,objc_msgSend來執(zhí)行實(shí)現(xiàn)方法

2.Runtime里面SEL和IMP的區(qū)別是什么?

3.UITableView性能優(yōu)化,尤其是滑動(dòng)時(shí),引申出GPU與CPU的一些討論。

SEL:類成員的方法指針,不同于C中的函數(shù)指針,SEL只是一個(gè)編號(hào)。
IMP: 函數(shù)指針,指向我們定義的函數(shù)

4.UIView與CALayer的區(qū)別?

1.首先UIView可以響應(yīng)事件,Layer不可以.
2.View和CALayer的Frame映射及View如何創(chuàng)建CALayer.
3.UIView主要是對顯示內(nèi)容的管理而 CALayer 主要側(cè)重顯示內(nèi)容的繪制。
4.在做 iOS 動(dòng)畫的時(shí)候,修改非 RootLayer的屬性(譬如位置、背景色等)會(huì)默認(rèn)產(chǎn)生隱式動(dòng)畫,而修改UIView則不會(huì)。

5.RunLoop的幾種Mode,子線程有runloop么?

3種

6.多線程的同步機(jī)制,GCD除了信號(hào)量,還有哪種同步機(jī)制。引申出dispatch_barrier_async。

我們使用GCD的時(shí)候如何讓線程同步,目前我能想到的就三種
1.dispatch_group
2.dispatch_barrier
3.dispatch_semaphore

dispatch_group_async(group, queue, ^{   
            NSLog(@"%i",i);   
            sleep(2);   
// 每次發(fā)送信號(hào)則semaphore會(huì)+1,
            dispatch_semaphore_signal(semaphore);   
        });   

7.NSTimer在不同runloop里面的作用?

NSTimer添加到Runloop中,但是不運(yùn)行
在iOS多線程中,每一個(gè)線程都有一個(gè)Runloop,但是只有主線程的Runloop默認(rèn)是打開的,其他子線程也就是我們創(chuàng)建的線程的Runloop默認(rèn)是關(guān)閉的,需要我們手動(dòng)運(yùn)行。
我們可以通過[NSRunLoop currentRunLoop]來獲得當(dāng)前線程的Runloop,并且調(diào)用[runloop addTimer:timer forMode:NSDefaultRunLoopMode]方法將定時(shí)器添加到Runloop中,最后一定不要忘記調(diào)用Runloop的run方法將當(dāng)前Runloop開啟,否則NSTimer永遠(yuǎn)也不會(huì)運(yùn)行。

8.觸摸事件響應(yīng)鏈和UIResponder

在使用App過程中,需要響應(yīng)各種事件,在IOS中不是所有對象都可以響應(yīng)事件,只有繼承了UIResponder的對象才能接收并處理事件。我們稱之為“響應(yīng)者對象”,
UIApplication、UIViewController、UIView都繼承自UIResponder,因此它們都是響應(yīng)者對象,都能夠接收并處理事件

9.autorelease pool是什么?簡述原理

10.KVO的內(nèi)部實(shí)現(xiàn)?

kvo,全稱Key-Value Observing,它提供了一種方法,當(dāng)對象某個(gè)屬性發(fā)生改變時(shí),允許監(jiān)聽該屬性值變化的對象可以接受到通知,然后通過kvo的方法響應(yīng)一些操作。
Objective-C 中有兩種使用鍵值觀察的方式:手動(dòng)或自動(dòng),此外還支持注冊依賴鍵(即一個(gè)鍵依賴于其他鍵,其他鍵的變化也會(huì)作用到該鍵)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,617評(píng)論 30 472
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,842評(píng)論 0 4
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,570評(píng)論 0 35
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 2,248評(píng)論 0 7
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場景。SDWebImage的原...
    LZM輪回閱讀 2,119評(píng)論 0 12

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