В чем разница между вызовом [super dealloc]
и получением IMP из суперкласса и вызовом этого?Разница между вызовом [super dealloc] и вызовом реализации суперкласса '
Method deallocMethod = class_getInstanceMethod([self superclass], @selector(dealloc));
IMP superImp = method_getImplementation(deallocMethod);
((void (*)(id, SEL))superImp)(self, _cmd);
Я получаю два разных поведения в зависимости от того, что я использую. Я вижу это различное поведение в динамическом подклассе UIViewController.
Edit:
Выработать. Я не использую ARC.
Также разницу в поведении сложно описать, но я постараюсь изо всех сил. Кажется, что очистка, которую выполняет UIViewController, находится в dealloc, не выполняется. Если я назову только [super dealloc], я получаю сообщение, отправляемое на освобожденный экземпляр контроллера вида. Это происходит, когда он увеличивает хэш контроллеров представления для представлений (что-то внутреннее, что я не совсем понимаю) в статической функции UIViewController (+ [UIViewController setViewController: forView:]). Я предполагаю, что контроллеры представлений не удаляются из хэша в случае, когда я вызываю только [super dealloc]
.
Если вы используете ARC, тогда все ставки отключены. –
Каковы различия в поведении? Легче объяснить симптомы, когда мы знаем, что они собой представляют. –
Я просто добавил больше описания разницы в поведении. Я не на 100% не понимаю, что именно. Я надеялся, что ответ здесь может дать мне подсказку, но я сделал все возможное, чтобы описать это. – drewag