1.如何判斷兩對(duì)象相等稚补?
isEqual:先判斷指針兩個(gè)對(duì)象的指針是否相同童叠,若相同則為同一對(duì)象,若不同课幕,比較class 所屬類(lèi)是否相同[self class]拯钻,相同的話(huà)帖努,比較對(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能為哪些類(lèi)型的值亭姥?
(一個(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ì)齊