更正一點(diǎn):
這里說明一下isa這個(gè)指針, isa是一個(gè)指向Class類指針(專業(yè)術(shù)語是指向元類,pointer to the metaclass),用來指向類的類型,我們可以通過object_getClass方法來獲取這個(gè)值; 正常來說,class方法內(nèi)部的實(shí)現(xiàn)就是獲取這個(gè)isa指針代表的元類(metaclass),但在kvo機(jī)制中蘋果注冊監(jiān)聽對象后 通過objc_allocateClassPair動(dòng)態(tài)重新創(chuàng)建了一個(gè)新類和元類,此時(shí)object_getClass()獲取的事就不是原來isa指向的元類 而是是新建的元類 參見蘋果文檔:Creates a new class and metaclass.You can get a pointer to the new metaclass by calling object_getClass(newClass))。
另外備注下[self class]和object_getClass(self)可是不一樣的,具體什么不一樣參考:http://stackoverflow.com/questions/15906130/object-getclassobj-and-obj-class-give-different-results(一個(gè)返回的是類,一個(gè)是實(shí)例,能一樣嗎?)
王道欽 評(píng)論自分析實(shí)現(xiàn)-實(shí)現(xiàn)KVO