面試題

1.如何判斷兩對(duì)象相等?

isEqual:先判斷指針兩個(gè)對(duì)象的指針是否相同,若相同則為同一對(duì)象,若不同,比較class 所屬類是否相同[self class],相同的話,比較對(duì)象中個(gè)屬性是否相同,若屬性相同,則返回相等。

NSArray 的檢測(cè)方式需要先比較兩個(gè)數(shù)組所包含的個(gè)數(shù)是否相同,若相同,則在每個(gè)對(duì)應(yīng)未知的兩個(gè)對(duì)象身上調(diào)用其“isEqual:"方法。如果對(duì)應(yīng)位置上的對(duì)象均相等,那么這兩個(gè)數(shù)組就相等。

2.字典中的key能為哪些類型的值?

(一個(gè)對(duì)象能不能作為字典的key,就取決于其有沒(méi)有__hash__方法。)

Objective-C 中的字典 NSDictionary 底層其實(shí)是一個(gè)哈希表,實(shí)際上絕大多數(shù)語(yǔ)言中字典都通過(guò)哈希表實(shí)現(xiàn)。

NSDictionary是使用 hash表來(lái)實(shí)現(xiàn)key和value之間的映射和存儲(chǔ)的, hash函數(shù)設(shè)計(jì)的好壞影響著數(shù)據(jù)的查找訪問(wèn)效率。數(shù)據(jù)在hash表中分布的越均勻,其訪問(wèn)效率越高。而在Objective-C中,通常都是利用NSString 來(lái)作為鍵值,其內(nèi)部使用的hash函數(shù)也是通過(guò)使用 NSString對(duì)象作為鍵值來(lái)保證數(shù)據(jù)的各個(gè)節(jié)點(diǎn)在hash表中均勻分布。

字典每個(gè)條目存取是通過(guò)將字典的鍵(Key)計(jì)算出鍵的hash值,通過(guò)查hash表獲取具體的value。所以作為NSDictionary 的鍵(Key)取值的時(shí)候,只要其key對(duì)象內(nèi)容地址相同就可以取出相應(yīng)的值。(PS:地址不同,對(duì)象相同的遵守<NSCopying>協(xié)議的key也可以取出對(duì)應(yīng)的value)。

OC對(duì)象作為字典的Key需要遵守NSCopying協(xié)議并且實(shí)現(xiàn)hash和isEqual兩個(gè)方法。

3.結(jié)構(gòu)體內(nèi)存,以及為什么?

內(nèi)存對(duì)齊

?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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