iOS 面試知識點(diǎn)

.1.數(shù)據(jù)的持久化:plist文件,對象歸檔,數(shù)據(jù)庫,coredata

2.KVO:鍵值觀察:是一種能使對象獲取其他對象變化通知機(jī)制

3.KVC:間接訪問對象實(shí)例變量,可以不通過存取方法訪問實(shí)例變量

4.淺復(fù)制(retain):并不拷貝對象本身,僅僅是拷貝指向?qū)ο蟮闹羔?/p>

5.深復(fù)制(copy):直接拷貝整個(gè)對象內(nèi)存到另一塊內(nèi)存中

【再簡單些說:淺復(fù)制就是指針拷貝;深復(fù)制就是內(nèi)容拷貝。

在非集合類對象中(系統(tǒng)非集合類對象指的是 NSString, NSNumber ... 之類的對象):對immutable對象進(jìn)行copy操作,是指針復(fù)制,mutableCopy操作時(shí)內(nèi)容復(fù)制;對mutable對象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制。用代碼簡單表示如下:

[immutableObject copy] // 淺復(fù)制

[immutableObject mutableCopy] //深復(fù)制

[mutableObject copy] //深復(fù)制

[mutableObject mutableCopy] //深復(fù)制

在集合類對象中(集合類對象是指NSArray、NSDictionary、NSSet ... 之類的對象),對immutable對象進(jìn)行copy,是指針復(fù)制,mutableCopy是內(nèi)容復(fù)制;對mutable對象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制。但是:集合對象的內(nèi)容復(fù)制僅限于對象本身,對象元素仍然是指針復(fù)制。用代碼簡單表示如下:

[immutableObject copy] // 淺復(fù)制

[immutableObject mutableCopy] //單層深復(fù)制

[mutableObject copy] //單層深復(fù)制

[mutableObject mutableCopy] //單層深復(fù)制


6.對MVC的理解:

M:(model) ? 數(shù)據(jù)模型--》存儲 定義 操作數(shù)據(jù)

V:(view) ? ? ? 表示視圖--》用戶操作交互

C: (Controller) ?控制器--》獲取數(shù)據(jù) 顯示在表示視圖上面

7.一個(gè)APP中有一個(gè)button,在手觸摸屏幕點(diǎn)擊后,到button收到點(diǎn)擊事件,中間發(fā)生過程?【從響應(yīng)者鏈來說】

1.設(shè)備將touch到的UITouch和UIEvent對象打包,放到當(dāng)前活動的Application事件隊(duì)列中 ? ?

2.單例的UIApplication會從事件隊(duì)列中取出觸摸事件并傳遞給單例UIWindow ? ?

3.UIWindow調(diào)用方法查找touch操作的所在視圖view

8.UIResponder 是 UIView的 父類 ? UIView 是 UIControl的父類

9.為什么實(shí)用copy申明NSString,若用Strong會有什么問題?

父類可接受子類對象(NSString是NSMUtableString的父類),實(shí)用copy是為了不受外界影響,無論是可變還是不可變,保證本身持有一個(gè)不可變副本 ? ? ?如果使用strong 那么屬性有可能指向一個(gè)可變對象,如果這個(gè)可變對象被外部修改了,那么影響該屬性

10.進(jìn)程 線程 區(qū)別 聯(lián)系

區(qū)別:一個(gè)線程只能屬于一個(gè)進(jìn)程,線程是操作系統(tǒng)識別的最小執(zhí)行和調(diào)度單位。

? ? ? ? ? ?一個(gè)進(jìn)程可以有很多個(gè)線程,但至少有一個(gè)線程。

? ? ? ? ? ? ?資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源。 同一進(jìn)程中的多個(gè)線程 ? ? ? ? ? ? 共享代碼段(代碼和常量),數(shù)據(jù)段(全局變量和靜態(tài)變量),擴(kuò)展段(堆存儲)。但是每個(gè)線程 ? ? ? ? ? ? 擁有自己的棧段,棧段又叫運(yùn)行時(shí)段,用來存放所有局部變量和臨時(shí)變量。

11. 對RunLoop的理解

? 什么是RunLoop?

從字面上看:運(yùn)行循環(huán)、跑圈

其實(shí)它內(nèi)部就是do-while循環(huán),在這個(gè)循環(huán)內(nèi)部不斷的處理各種任務(wù)(比如Source、Timer、Observer)

一個(gè)線程對應(yīng)一個(gè)RunLoop,主線程的RunLoop默認(rèn)已經(jīng)啟動,子線程的RunLoop需要手動啟動(調(diào)用run方法)

RunLoop只能選擇一個(gè)Mode啟動,如果當(dāng)前Mode中沒有任何Soure、Timer、Observer,那么就直接退出RunLoop

在開發(fā)中如何使用RunLoop?什么應(yīng)用場景?

開啟一個(gè)常駐線程(讓一個(gè)子線程不進(jìn)入消亡狀態(tài),等待其他線程發(fā)來消息,處理其他事件)

在子線程中開啟一個(gè)定時(shí)器

在子線程中進(jìn)行一些長期監(jiān)控

可以控制定時(shí)器在特定模式下執(zhí)行

可以讓某些事件(行為、任務(wù))在特定模式下執(zhí)行

可以添加Observer監(jiān)聽RunLoop的狀態(tài),比如監(jiān)聽點(diǎn)擊事件的處理(在所有點(diǎn)擊事件之前做一些事情

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 現(xiàn)在進(jìn)入本篇的正題。本篇的面試題是我認(rèn)為比較好的iOS開發(fā)基礎(chǔ)知識點(diǎn),希望大家看過這后在理解的基礎(chǔ)上掌握而不是死記...
    iOSTbag閱讀 725評論 1 7
  • 把網(wǎng)上的一些結(jié)合自己面試時(shí)遇到的面試題總結(jié)了一下,以后有新的還會再加進(jìn)來。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,610評論 0 20
  • 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類型的...
    不懂后悔閱讀 839評論 0 53
  • 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡要敘述?設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類型的事...
    irenb閱讀 5,256評論 1 21
  • 七月的最后一天,不知是天氣的原因,還是怎樣。整個(gè)人軟軟的,不知是習(xí)慣還是壓力,睡眠越來越差了。這也是導(dǎo)致心情陰晴不...
    Lucia潔閱讀 194評論 0 0