
更正一點:
這里說明一下isa這個指針, isa是一個指向Class類指針(專業術語是指向元類,pointer to the metaclass),用來指向類的類型,我們可以通過object_getClass方法來獲取這個值; 正常來說,class方法內部的實現就是獲取這個isa指針代表的元類(metaclass),但在kvo機制中蘋果注冊監聽對象后 通過objc_allocateClassPair動態重新創建了一個新類和元類,此時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(一個返回的是類,一個是實例,能一樣嗎?)
王道欽 評論自分析實現-實現KVO