iOS常見面試題

1、淺復(fù)制和深復(fù)制的區(qū)別

淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔?,而不?fù)制引用對象本身。

深層復(fù)制:復(fù)制引用對象本身。

意思就是說我有個(gè)A對象,復(fù)制一份后得到A_copy對象后,對于淺復(fù)制來說,A和A_copy指向的是同一個(gè)內(nèi)存資源,復(fù)制的只不過是是一個(gè)指針,對象本身資源還是只有一份,那如果我們對A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對象同樣被修改,這其實(shí)違背了我們復(fù)制拷貝的一個(gè)思想。深復(fù)制就好理解了,內(nèi)存中存在了兩份獨(dú)立對象本身。

2、KVO and KVC

kvc: 鍵 - 值編碼是一種間接訪問對象的屬性使用字符串來標(biāo)識屬性,而不是通過調(diào)用存取方法,直接或通過實(shí)例變量訪問的機(jī)制。很多情況下可以簡化程序代碼。

kvo: 鍵值觀察機(jī)制,他提供了觀察某一屬性變化

3、frame和bounds有什么不同

frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是父親的坐標(biāo)系統(tǒng))

bounds指的是:該view在本身坐標(biāo)系統(tǒng)中 的位置和大小。(參照點(diǎn)是本身坐標(biāo)系統(tǒng))

4、進(jìn)程與線程

進(jìn)程:進(jìn)程就是一個(gè)正在運(yùn)行的程序(一堆CPU指令的集合),進(jìn)程里至少應(yīng)該包含一個(gè)線程。

線程:一條不分叉的CPU指令的集合,就是一個(gè)線程。

多線程:在一個(gè)進(jìn)程里面,有多條不分叉的CPU指令的集合,就是多線程。

一個(gè)真正的CPU(指物理的CPU),一個(gè)物理的CPU可以虛擬成多核的CPU。每一個(gè)虛擬出來的CPU核同時(shí)的某一時(shí)刻,只能執(zhí)行一個(gè)CPU指令。那么,假設(shè)CPU虛擬成了兩個(gè)核,其中一個(gè)核分給了“主線程”,另一個(gè)核需要去處理3個(gè)“分線程”,分別是以下3個(gè)線程:

線程1:該條不分叉的CPU指令集包括 20句指令

線程2:該條不分叉的CPU指令集包括 15句指令

線程3:該條不分叉的CPU指令集包括 30句指令。

由于上邊提到,虛擬處的CPU核在同一時(shí)刻,只能執(zhí)行一個(gè)CPU指令。

上下文切換(即,多一個(gè)CPU處理多線程時(shí),會將處理過的線程的指令的信息保存在寄存器里面,然后將時(shí)間片分配給其他線程,當(dāng)時(shí)間片再輪轉(zhuǎn)過來的時(shí)候會將寄存器狀態(tài)恢復(fù),接著執(zhí)行沒有執(zhí)行完的指令)

多線程的優(yōu)點(diǎn):

為了提高用戶體驗(yàn)

但是多線程也有它的缺點(diǎn):

1、比較耗費(fèi)系統(tǒng)資源

2、造成資源競爭

3、會出現(xiàn) 死鎖

5、retain/copy/assign/release/autorelease/dealloc/strong/weak關(guān)鍵字

retain:使對象的引用計(jì)數(shù)+1

copy:復(fù)制內(nèi)容

assign:

release:使對象的引用計(jì)數(shù)-1

autorelease:

dealloc:

strong:

weak:

6、self.name = xxx 與 _name= xxx 的區(qū)別


7、類變量的@protected ,@private,@public,@package聲明各有什么含義?


8、生命周期

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

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

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