[super dealloc]
从超类调用和获取 IMP 和调用它有什么区别?
Method deallocMethod = class_getInstanceMethod([self superclass], @selector(dealloc));
IMP superImp = method_getImplementation(deallocMethod);
((void (*)(id, SEL))superImp)(self, _cmd);
根据我使用的内容,我会得到两种不同的行为。我在 UIViewController 的动态子类中看到了这种不同的行为。
编辑:
详细说明。我没有使用 ARC。
行为上的差异也很难描述,但我会尽力而为。似乎 UIViewController 在 dealloc 中所做的一些清理工作尚未完成。如果我只调用 [super dealloc] 我会收到一条消息发送到视图控制器的已释放实例。当它在 UIViewController (+[UIViewController setViewController:forView:]) 的静态函数中为视图(我不完全理解的内部内容)增长视图控制器的哈希时,就会发生这种情况。我的猜测是,在我只调用[super dealloc]
.