RemoveFromSuperview (): другое поведение в iOS SDK5? - PullRequest
1 голос
/ 21 ноября 2011

У меня возникают сбои при запуске моего приложения на iOS5. Код созвездия у меня:

  • UIViewController A имеет событие "InputEnded".
  • UIViewController B добавляет A представление в качестве подпредставления и присоединяется к InputEnded.
  • В InputEnded, B удаляет представление A из суперпредставления, удаляет обработчики событий, удаляет A и устанавливает его в NULL.

В iOS 4.3 это работает, как и ожидалось, однако A ViewDidDisappear() никогда не вызывается, но это нормально.

В iOS 5, однако, срабатывает ViewDidDisappear() DOES . Это уволено некоторое время спустя. Но проблема в том, что он срабатывает, хотя A уже расположен (дескриптор == 0) и, следовательно, он аварийно завершится!

Я, A и B, переопределяю bool AutomaticallyForwardAppearanceAndRotationMethodsToChildViewControllers и возвращаю FALSE, чтобы сохранить то же поведение, что и в iOS 4.3, но, очевидно, он всегда будет вызывать свой собственный ViewDidDisappear(), независимо от того, что вы вернете.

Может кто-нибудь объяснить, что здесь происходит и как это преодолеть?

1 Ответ

0 голосов
/ 24 ноября 2011

Причина сбоя заключается в том, что A не должен был вручную утилизироваться, только обнуляться.

Утилизация A уничтожила собственное представление контроллера, и для iOS5 SDK она все еще требовалась, когда позже был сделан вызов ViewDidDisappear. Сбой не произошел с iOS4.3 SDK, потому что он не вызывал ViewDidDisappear.

То есть просто обнуление A означает, что пользовательский код больше не ссылается на (управляемый) экземпляр и позволяет GC собирать его позже (как только ничто на него не ссылается). Это работает в обеих версиях SDK, и память восстанавливается в обоих случаях (подтверждается добавлением финализатора в A для вывода строки в Выход приложения MonoDevelop после выполнения).

Полный тестовый пример и объяснение доступны на bugzilla .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...