美文网首页
12-Runtime-04(super、class、superc

12-Runtime-04(super、class、superc

作者: weyan | 来源:发表于2019-03-11 13:17 被阅读0次

一、super

super:决定是从父类开始查找方法。

二、class

调用class返回的类型是由消息的接收者决定的。

三、superclass

--------------------------------------------------面试题----------------------------------------------------------

1、class面试题

  • 1、isMemberOfClass:(Class )cls
    对象方法:
    判断方法调用者的类对象是否是class类对象
    类方法:
    判断类对象的元类对象是否是cls类对象
  • 2、isKindOfClass:(Class)cls
    对象方法:
    1、判断类对象是否等于当前类的类对象。
    2、判断类对象是否等于父类的类对象。
    3、继续一层一层的去找父类判断。
    类方法:
    1、判断类对象的元类对象是否等于当前类对象的元类对象。
    2、判断类对象的元类对象是否等于父类的元类对象。
    3、继续一层一层的去找父类的元类对象。

2、super面试题

疑惑1、print为什么能调用成功?

obj就相当于person;cls相当于isa;所以print方法能调用成功。

疑惑2、为什么self.name变成了ViewController?或者其他

  • 第一种情况:打印的是不是控制器

test/cls/obj这三个地址是挨着的,在栈中从高地址到低地址,取出_name时,跳过isa的8个字节空间,找到test这8个字节空间。

上面的等价于下面的:

  • 第二种情况:打印的是控制器ViewController
  • 验证objc_msgSendSuper2中的第一个参数objc_super结构体中的当前类的类对象

相关文章

网友评论

      本文标题:12-Runtime-04(super、class、superc

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