Объект target-c не получает dealloc:ed

У меня проблема с объектом, который не был освобожден в target-c. Я почти уверен, что это потому, что он где-то сохраняется, но я не знаю, где (проверка retainCount, где он должен быть 0, возвращает 1). Я много раз просматривал свой код, но не вижу, что его удерживает, и что я не выпускаю. Может быть даже ошибка в рамках, которые я использую.

Как бы вы справились с чем-то вроде этого? Я подумал, что, возможно, вы могли бы поискать в памяти и посмотреть, что указывает на этот объект, значительно упростив выяснение, почему это так, но я не совсем уверен, как этого достичь. Может быть, другое решение?

3 ответа

Решение

Вы пробовали инструменты?

Инструменты великолепны, и могут обнаруживать протекшие объекты, если и когда они просочились, но в подобных случаях я предлагаю вам сначала использовать Статический анализатор XCode, новый в XCode 3.2 со Snow Leopard. (Если вы используете Leopard, вы можете использовать версию для командной строки.) Статический анализ позволяет обнаружить множество проблем, даже не выполняя ваш код, и во многих случаях его гораздо проще использовать, чем Instruments.

Переопределите -retain и -release, затем установите точки останова, чтобы увидеть, кто их вызывает.

Другие вопросы по тегам