一道很经典的面试题。
|
|
分别打印什么?初看以为前者打印DemoObj
,后者打印NSObject
,实则不然,两者均是打印DemoObj
。这是为什么呢?
Xcode - Debug - Debug Workflow - Always Show Disasembly 。通过这个操作,在第二句NSLog
之后,打上断点,之后运行时,可以看到以下两个截图。
毫无疑问,self.class 实则是通过 objc_msgSend 进行发送消息,最后得到的是该类的类名。但是 super.class 使用的却是 objc_msgSendSuper2,并不是我们认为的 objc_msgSendSuper。通过查询runtime
的源码。可以得知 objc_msgSendSuper2 定义。
|
|
文档解释的很清楚。调用的是当前类,并不是其父类。