class方法和objc_getClass方法有什么区别?
源代码
+ (Class)class { return self; } - (Class)class { return object_getClass(self); }
Class object_getClass(id obj) { if (obj) return obj->getIsa(); else return Nil; }
结合对象的内存布局
分5种情况
1.当obj是实例对象时
- (Class)class { return object_getClass(self); }
class方法和objc_getClass方法一样,都是返回实例对象的isa指针。
两者相同
2.当obj是class类对象时
class方法返回自身
objc_getClass方法返回类对象的isa指针,元类对象
两者不同
3.当obj为Rootclass类对象时
class方法返回自身
objc_getClass方法返回类对象的isa指针,根元类对象
两者不同
4.当obj为Metaclass类对象时
class方法返回自身
objc_getClass方法返回类对象的isa指针,根元类对象
两者不同
5.当obj为Rootmetaclass类对象时
class方法返回自身
objc_getClass方法返回类对象的isa指针,根元类对象
两者相同