ios面試題1

1.一個(gè)NSObject對(duì)象占用了多少內(nèi)存?
系統(tǒng)分配了16個(gè)字節(jié)給NSObject對(duì)象(通過(guò)malloc_size函數(shù)獲得)
NSObject對(duì)象內(nèi)部只占用了8個(gè)字節(jié)(64bit環(huán)境下,可以通過(guò)class_getInstanceSize函數(shù)獲得)

2.對(duì)象的isa指針指向哪里?
instance對(duì)象的isa指針指向class對(duì)象
class對(duì)象的isa指針指向meta-class對(duì)象
meta-class對(duì)像的isa指針指向基類(lèi)的meta-clas對(duì)象

3.OC類(lèi)信息存放在哪里?
對(duì)像方法,屬性,成員變量,協(xié)議信息,存放在class對(duì)象中
類(lèi)方法存放在meta-class對(duì)象中
成員變量的具體值,存放在instance對(duì)象

4.ios用什么方式實(shí)現(xiàn)對(duì)一個(gè)對(duì)象的KVO?(KVO的本質(zhì)是什么?)
利用runtimeAPI自動(dòng)生成一個(gè)子類(lèi),并讓isa指針指向這個(gè)全新的子類(lèi)
當(dāng)修改instance對(duì)象的屬性時(shí),會(huì)調(diào)用Foundation的_NSSetXXXXValueAndNotify函數(shù)
*willChangeValueForKey:
*父類(lèi)原來(lái)的setter
*didChangeValueForKey:
內(nèi)部會(huì)觸發(fā)監(jiān)聽(tīng)器(oberser)的監(jiān)聽(tīng)方法observeValueForKeyPath:ofObject:change:context:

5.如何手動(dòng)觸發(fā)KVO?
手動(dòng)調(diào)用willChangeValueForKey:和didChangeValueForKey:

6.直接修改成員變量會(huì)觸發(fā)KVO么?
不會(huì)觸發(fā)KVO

7.通過(guò)KVC修改屬性會(huì)觸發(fā)KVO嗎?
會(huì)觸發(fā)KVO

8.kvc的賦值和取值過(guò)程是什么樣的,原理是什么?

9.Category的實(shí)現(xiàn)原理?
Category編譯之后的底層結(jié)構(gòu)是struct category_t,里面存儲(chǔ)著分類(lèi)的對(duì)象方法,類(lèi)方法,屬性,協(xié)議信息
在程序運(yùn)行的時(shí)候,runtime會(huì)將Category的數(shù)據(jù),合并到類(lèi)信息中(類(lèi)對(duì)象,元類(lèi)對(duì)象中)

  1. Category和Class Extension的區(qū)別是什么?
    Class Extension在編譯的時(shí)候,它的數(shù)據(jù)就已經(jīng)保存在類(lèi)信息中
    Category試運(yùn)行時(shí)才會(huì)把類(lèi)合并到類(lèi)信息中

  2. Category有l(wèi)oad方法嗎?load方法是什么時(shí)候調(diào)用的?load能實(shí)現(xiàn)繼承嗎?
    有l(wèi)oad方法
    load方法在runtime加載類(lèi),分類(lèi)時(shí)候調(diào)用
    load可以繼承,但一般情況下不會(huì)主動(dòng)去調(diào)用load方法,都是讓系統(tǒng)自動(dòng)去調(diào)用

12.load和initialize方法的區(qū)別是什么?它們?cè)贑ategory的調(diào)用順序?以及出現(xiàn)繼承時(shí)它們之間的調(diào)用過(guò)程?

  1. Category能否添加成員變量?如果可以,如何給Category添加成員變量?
    不可以直接給Category添加成員變量,但可以間接實(shí)現(xiàn)Category有成員變量的效果

14.block的原理是怎樣的?本質(zhì)是什么?
封裝了調(diào)用函數(shù)以及調(diào)用環(huán)境的OC對(duì)象

15.__block的作用是什么?有什么使用注意點(diǎn)?

  1. block的屬性修飾詞為什么是copy,使用blcok時(shí)要注意哪些?
    blcok沒(méi)有copy操作,就不會(huì)在堆上
    使用注意:循環(huán)引用問(wèn)題

17.block在修改NSMutableArray時(shí),需不需要添加__block?

?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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