Я использую goto-заряд для подобных вещей. Это не прекрасно, но этого всегда достаточно для бега трусцой моей памяти о том, какое изменение я внес и быстро забыл о.
Вот статья о нескольких подходах к сообщению о покрытии кода в вашем приложении:
http://seriot.ch/blog.php?article=20080728
Он ориентирован на Mac приложений, но в основном относится и к материалам iPhone (DTrace можно использовать только в симуляторе)
Как отмечается в статье, это более сложная проблема в Objective-C, чем в других языках, так как очень легко иметь метод, вызываемый PerformSelector, этот статический анализ будет сообщать как мертвый код, даже если он вызывается (да, вы также можете сделать что-то подобное в Jav, но это делается гораздо реже).
Вероятно, флаг предупреждения gcc - лучшая идея, наряду с тщательным изучением то, что он считает непривычными методами. На самом деле запустить все возможные пути кода в приложении на самом деле довольно сложно, но если у вас есть меньший набор возможных функций для удаления, по крайней мере, вы можете делать выбор быстрее, чтобы вам не приходилось тестировать каждый путь ...
РЕДАКТИРОВАТЬ: Я, вероятно, должен прояснить, что покрытие кода - это метод, который вы можно использовать для поиска "мертвого" кода, которым вы пользовались после
EDIT2: Ссылка мертва! Я не могу найти кешированную версию и не могу вспомнить ее достаточно хорошо, чтобы резюмировать больше о том, что она содержала.
Я обнаружил, что clang очень полезен для очистки кода и поиска потенциальных проблем, хотя это не обязательно помогает в поиске неиспользуемых фрагментов кода. Также доступен хороший интерфейс .
Я знаю, что это не тот ответ, который вы ищете, но использование системы контроля версий, вероятно, лучший способ справиться с такими ситуациями. Когда вы собираетесь провести серьезный рефакторинг или попробовать что-то сложное, просто создайте ветку, а затем объедините ее или выбросьте.
Как насчет функции Снимков в Xcode? Похоже, что если вы не держите различные ветки на длительный срок, то это правильный путь. Просто сосредоточьтесь на одной функции за раз и заставьте ее работать и подходить для проверки. Если у вас есть что-то, что нужно сохранить, сделайте проверку в исходном репозитории. В противном случае сделайте снимок и откатитесь при необходимости. Если вам действительно нужны короткие фрагменты кода, держите под рукой текстовый файл библиотеки фрагментов кода. Возможно, вставьте заголовок комментария для каждого фрагмента для последующего поиска.
Иногда я обнаруживаю, что разработчики в моей команде удаляют ссылки на классы, которые им больше не нужны, а не сами файлы. Я часто перехожу к действию «добавить существующие файлы», просматриваю селектор файлов и удаляю «несерые» потерянные исходные файлы с помощью отдельного окна Finder.
Я знаю, что это сложно, но если вы хотите, чтобы ваш код был качественным, когда вы закончите все «тестирование другого решения», боюсь, вам нужно убедиться, что вы всегда комментируете и / или удаляя ненужный код по ходу дела.
Если задуматься, это имеет смысл. Если вы продолжаете что-то менять и переименовывать, вам придется либо убирать его по ходу, либо убирать в конце. Это сложная практика, но либо это, либо очистка в конце.
Часто, если вы оставите это до конца, может быть проще просто начать новый проект и скопировать полезные фрагменты.
Использование системы управления версиями очень помогает, так как после тщательной проверки вы можете сравнить источник, чтобы увидеть изменения - отлично подходит для поиска отладочных журналов NSLogs и других быстрых приемов, которые вы забыли добавить.
Пометка временного кода маркером, который вы можете найти, также хорошая идея. Я обычно помечаю любой код, который не закончил, с NYI. Например, если я добавляю IBAction, но еще не написал его, у меня будет NSLog (@ "myaction NYI"). По мере прохождения разработки я иногда ищу в проекте NYI и смотрю, есть ли что-то, что я забыл реализовать. Временный или взломанный код отладки я помечаю с помощью «// NYI delete», чтобы не забыть вернуться и удалить его.
Для удаления неиспользуемого кода я недавно написал сценарий, который: проверяет, все ли зарегистрировано и что он построен чисто, затем просмотрел каждый файл .h в проекте, очистил его и связанный с ним файл .c / .cpp / .m / .mm, а затем выполнил тестовую сборку. Если он все еще построен, он продолжается, в противном случае он откатывает этот файл и переходит к следующему файлу заголовка. После завершения сценария я проверил статус подрывной деятельности, чтобы увидеть, от каких файлов, по его мнению, можно избавиться. Мне также нужно было избегать любых файлов, которые использовались ресурсами. Это сработало довольно хорошо.
Я хочу написать сценарий, который просматривает все файлы и удаляет каждую строку импорта # include / # и проверяет, компилируется ли она, чтобы удалить все лишние включения, но у меня нет времени, чтобы это.
После завершения сценария я проверил статус подрывной деятельности, чтобы увидеть, от каких файлов, по его мнению, можно избавиться. Мне также приходилось избегать любых файлов, которые использовались ресурсами. Это сработало довольно хорошо.Я хочу написать сценарий, который просматривает все файлы и удаляет каждую строку импорта # include / # и проверяет, компилируется ли она, чтобы очистить все лишние включения, но у меня нет времени, чтобы это.
После завершения сценария я проверил статус подрывной деятельности, чтобы увидеть, от каких файлов, по его мнению, можно избавиться. Мне также приходилось избегать любых файлов, которые использовались ресурсами. Это сработало довольно хорошо.Я хочу написать сценарий, который просматривает все файлы и удаляет каждую строку импорта # include / # и проверяет, компилируется ли она, чтобы очистить все лишние включения, но у меня нет времени, чтобы это.