случайный сбой iOS UITableView - PullRequest
0 голосов
/ 08 марта 2011

У меня есть проблема, которую я не могу найти четко, может быть, вы можете мне помочь ...

У меня есть проект iPad, основанный на UINavigationController, большинство (но не все) контроллеров внутри являются экземплярами UITableViewController, и все работает хорошо ...

Все, за исключением того, что мое приложение аварийно завершает работу, иногда после 10 минут использования, иногда только после 10 секунд ... Он никогда не падает на одном и том же изображении, никогда в одно и то же время, что затрудняет его воспроизведение.

Кроме того, на устройстве происходят только швы, в симуляторе у меня никогда не было этого сбоя.

Отладчик не очень мне помогает, вот что он говорит: - [UITableView autorelease]: сообщение отправлено освобожденному экземпляру 0x8e9800

А вот и стек вызовов: http://i.stack.imgur.com/JSCHx.png

Есть идеи? Спасибо (и извините за мой английский)

Ответы [ 5 ]

1 голос
/ 08 марта 2011

Вы переиздаваете UITableView где-то в вашем коде. Вы вызываете release или autorelease для UITableView внутри одного из ваших UITableViewControllers? Вы должны выпускать только те объекты, которые у вас есть. Вы можете владеть объектом, используя методы, начинающиеся с alloc, new, copy или retain.

Пожалуйста, прочитайте руководство по управлению памятью какао для получения дополнительной информации.

Полезные ссылки:

http://www.cocoadev.com/index.pl?MemoryManagement

http://www.cocoadev.com/index.pl?RulesOfThumb

0 голосов
0 голосов
/ 09 марта 2011

Я прошу прощения, после перечитывания всего моего исходного кода, я нашел ОДИН ViewController (у меня есть около 20 ViewController), где я выпустил Outlet, в ViewDidUnload.Я не очень хорошо понял механизм ViewDidUnload, он вызывается для освобождения представлений (но не объектов контроллеров), когда памяти мало, и представление не видно (например: First ViewController из NavigationController), и представления повторно загружаютсякогда ViewController снова становится видимым ...

В симуляторе память редко является проблемой, поэтому ViewDidUnload почти никогда не вызывается ...

Проблема исправлена, спасибо всем за помощь

0 голосов
/ 08 марта 2011

Я написал о том, как отлаживать подобные вещи в своем блоге:

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

В основном, попробуйте сначала эти три вещи:

  1. Выполнитеa Создайте анализ и исправьте все, что вы видите
  2. Включите зомби, запустите ваш код - он сообщит вам, если вы общаетесь с освобожденными объектами
  3. Если это не удастся, попробуйте Debug Malloc, но этопуть сложнее.
0 голосов
/ 08 марта 2011

В какой-то момент вы либо выпускаете экземпляр UITableView, которым вы не владеете, либо вам не удается retain один в какой-то момент, когда вы сохраняете ссылку на него (например, сохраняете его в ivar или свойстве, объявленном assign а не сохранять).

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