Как уже отмечали другие, статический анализатор очень помогает - в Snow Leopard вы можете просто запустить "Построить и проанализировать" и просмотреть результаты.
Я бы сказал, что следующим шагом будут инструменты, но похоже, что ваша проблема скорее в досрочном освобождении объектов, чем в утечке памяти. Чтобы отследить это, лучше всего включить обнаружение зомби.
В XCode откройте элемент «Исполняемые файлы» в браузере проекта, щелкните правой кнопкой мыши по вашему исполняемому файлу и выберите «Получить информацию». Затем перейдите на вкладку «Аргументы», перейдите в нижнюю половину и добавьте новую переменную среды. Назовите его «NSZombieEnabled» и установите значение «YES» - убедитесь, что оно также проверено, хотя оно должно быть по умолчанию, если вы его создаете.
Теперь, когда вы запускаете приложение, всякий раз, когда вы используете освобожденный объект, отладчик останавливается непосредственно перед тем, как вы получите сообщение BAD_ACCESS, и вы можете видеть, что освобождается, чего не должно быть.
Когда вы закончите, вы хотите снять отметку с переменной NSZombieEnabled для вашего исполняемого файла, потому что система не освободит память, пока она установлена.
Отладка этих вещей может быть немного хитрой, потому что вам нужно выяснить, где был выпущен объект, чтобы найти, где он был ошибочно освобожден. Snow Leopard Instruments помогает в этом, потому что Object Alloc работает вместе с NSZombieEnabled, чтобы показать вам трек везде, где были выпущены объекты.
Вы также можете использовать инструмент "Утечки", чтобы найти места, где вы думали, что выпустили объекты, но на самом деле этого не сделали - хотя я обнаружил на практике, что примерно в половине случаев Утечки не будут показывать ничего, потому что в дополнение к утечка, вы также сохранили ссылку на объект, так что Утечки не знают, что у вас действительно есть утечка. Это может быть хорошей идеей - просто посмотреть график выделения объектов и выбрать области, которые поднимаются, не освобождая память, когда вы думаете, что должны.