Метод Objective C removeFromSuperview вызывает отправку сообщения освобожденному объекту - PullRequest
0 голосов
/ 03 декабря 2011

У меня проблема при вызове removeFromSuperview в объекте View.История выделения (в соответствии с приборами) выглядит следующим образом:

myView alloc -> myView 1

addSubview: myview -> myView 2

myView release -> myView 1

myView removeFromSuperview -> myView 0

myView dealloc -> myView -1 (вызывается removeFromSuperview)

Я понимаю, что метод dealloc вызывается, поскольку счетчик ссылок достигает 0.Однако я не понимаю, почему он уменьшает число ссылок на единицу, вызывая отправку сообщения в освобожденный метод.

Кроме того, я могу обнаружить его только с помощью инструментов.Использование xcode не приводит к сбою.

Любая помощь будет принята с благодарностью.Большое спасибо.

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Другой действительно простой способ найти проблемы с подсчетом ссылок в XCode - использовать Analyze. Компилятор теперь достаточно умен, чтобы реализовывать автоматический подсчет ссылок, поэтому он также достаточно умен, чтобы находить проблемы с подсчетом ссылок.

0 голосов
/ 03 декабря 2011

Самый простой способ решить эту проблему, как правило:

  • запуск программы на приборах с включенной записью счетчика ссылок
  • воспроизвести проблему
  • выполнение остановится
  • , затем вы анализируете историю подсчета ссылок и находите неподходящее декремент в истории

как только вы освоитесь, поиск зомби займет около 2минут.

...