美文网首页iOS开发
iOS object_getClass、objc_getClas

iOS object_getClass、objc_getClas

作者: BlackStar暗星 | 来源:发表于2020-07-15 18:13 被阅读0次

对于这几个方法的区别,首先需要了解 OC 类的数据结构,(任何runtime的文章都会介绍的)

对于 classobject_getClassobjc_getClass 三种方法,首先:全部返回 Class 类对象

  • class 方法
    class 方法无论是类对象还是实例对象都可以调用,可以嵌套,返回永远是自身的类对象。如:
Person *p = [[Person alloc]init];
Class *pClass == [p class] == [ [p class]class] == [[ [p class]class]class] == [Person class]
  • object_getClass 方法
    object_getClassclass 同样可以嵌套,但是 object_getClass 得到的是他的 isa 指向的地址。即:
Person *p = [[Person alloc]init];     
p->[Person class]->PersonMeteClass->PersonMetaClass(元类的ISA指针是指向自己的)

意思是 p 的 isa 指向 [Person class] , [Person class] 的 isa 指向 PersonMeteClass

  • objc_getClass 方法
    objc_getClass 无法嵌套,因为参数 是 char 类型,效果和 class 相同(因为不能嵌套,所以和class可以认为是相同的)


验证:通过 class_isMetaClass 方法可以验证(方法判断是否是元类)



相关文章

网友评论

    本文标题:iOS object_getClass、objc_getClas

    本文链接:https://www.haomeiwen.com/subject/pwujhktx.html