更正一点:
这里说明一下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(一个返回的是类,一个是实例,能一样吗?)