關(guān)于面試中經(jīng)常會(huì)問(wèn)到isMemberOfClass和isKindOfClass區(qū)別,大家可能都能回答出一一二二,但是為什么這樣呢?下面我們來(lái)一起探討一下。
首先我們看一下isMemberOfClass 的底層實(shí)現(xiàn):

isMemberOfClass下類(lèi)方法和實(shí)例方法的底層實(shí)現(xiàn)

object_getClass 底層實(shí)現(xiàn)
從上圖我們不難看出?isMemberOfClass 方法在底層進(jìn)行調(diào)用時(shí),就是對(duì)類(lèi)的本身進(jìn)行一個(gè)判斷,也就是說(shuō)不會(huì)進(jìn)行更多的操作。
下面我們看一下isKindOfClass的底層實(shí)現(xiàn):

isKindOfClass下類(lèi)方法和實(shí)例方法的底層實(shí)現(xiàn)
從上述代碼片段我們不難看出,isKindOfClass的判斷不僅僅是判斷是當(dāng)前類(lèi),還會(huì)逐級(jí)的根據(jù)繼承關(guān)系向上查找,在類(lèi)方法下會(huì)一直進(jìn)行查找直到根元類(lèi),在對(duì)象方法中則會(huì)一直查找到基類(lèi)。
以上就是個(gè)人理解的二者的區(qū)別,如有錯(cuò)誤,敬請(qǐng)指出。