Чистка кода Objective C

Я использую goto-заряд для подобных вещей. Это не прекрасно, но этого всегда достаточно для бега трусцой моей памяти о том, какое изменение я внес и быстро забыл о.

5
задан Jonah 25 August 2009 в 15:24
поделиться

7 ответов

Вот статья о нескольких подходах к сообщению о покрытии кода в вашем приложении:

http://seriot.ch/blog.php?article=20080728

Он ориентирован на Mac приложений, но в основном относится и к материалам iPhone (DTrace можно использовать только в симуляторе)

Как отмечается в статье, это более сложная проблема в Objective-C, чем в других языках, так как очень легко иметь метод, вызываемый PerformSelector, этот статический анализ будет сообщать как мертвый код, даже если он вызывается (да, вы также можете сделать что-то подобное в Jav, но это делается гораздо реже).

Вероятно, флаг предупреждения gcc - лучшая идея, наряду с тщательным изучением то, что он считает непривычными методами. На самом деле запустить все возможные пути кода в приложении на самом деле довольно сложно, но если у вас есть меньший набор возможных функций для удаления, по крайней мере, вы можете делать выбор быстрее, чтобы вам не приходилось тестировать каждый путь ...

РЕДАКТИРОВАТЬ: Я, вероятно, должен прояснить, что покрытие кода - это метод, который вы можно использовать для поиска "мертвого" кода, которым вы пользовались после

EDIT2: Ссылка мертва! Я не могу найти кешированную версию и не могу вспомнить ее достаточно хорошо, чтобы резюмировать больше о том, что она содержала.

5
ответ дан 18 December 2019 в 11:59
поделиться

Я обнаружил, что clang очень полезен для очистки кода и поиска потенциальных проблем, хотя это не обязательно помогает в поиске неиспользуемых фрагментов кода. Также доступен хороший интерфейс .

3
ответ дан 18 December 2019 в 11:59
поделиться

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

2
ответ дан 18 December 2019 в 11:59
поделиться

Как насчет функции Снимков в Xcode? Похоже, что если вы не держите различные ветки на длительный срок, то это правильный путь. Просто сосредоточьтесь на одной функции за раз и заставьте ее работать и подходить для проверки. Если у вас есть что-то, что нужно сохранить, сделайте проверку в исходном репозитории. В противном случае сделайте снимок и откатитесь при необходимости. Если вам действительно нужны короткие фрагменты кода, держите под рукой текстовый файл библиотеки фрагментов кода. Возможно, вставьте заголовок комментария для каждого фрагмента для последующего поиска.

2
ответ дан 18 December 2019 в 11:59
поделиться

Иногда я обнаруживаю, что разработчики в моей команде удаляют ссылки на классы, которые им больше не нужны, а не сами файлы. Я часто перехожу к действию «добавить существующие файлы», просматриваю селектор файлов и удаляю «несерые» потерянные исходные файлы с помощью отдельного окна Finder.

1
ответ дан 18 December 2019 в 11:59
поделиться

Я знаю, что это сложно, но если вы хотите, чтобы ваш код был качественным, когда вы закончите все «тестирование другого решения», боюсь, вам нужно убедиться, что вы всегда комментируете и / или удаляя ненужный код по ходу дела.

Если задуматься, это имеет смысл. Если вы продолжаете что-то менять и переименовывать, вам придется либо убирать его по ходу, либо убирать в конце. Это сложная практика, но либо это, либо очистка в конце.

Часто, если вы оставите это до конца, может быть проще просто начать новый проект и скопировать полезные фрагменты.

1
ответ дан 18 December 2019 в 11:59
поделиться

Использование системы управления версиями очень помогает, так как после тщательной проверки вы можете сравнить источник, чтобы увидеть изменения - отлично подходит для поиска отладочных журналов NSLogs и других быстрых приемов, которые вы забыли добавить.

Пометка временного кода маркером, который вы можете найти, также хорошая идея. Я обычно помечаю любой код, который не закончил, с NYI. Например, если я добавляю IBAction, но еще не написал его, у меня будет NSLog (@ "myaction NYI"). По мере прохождения разработки я иногда ищу в проекте NYI и смотрю, есть ли что-то, что я забыл реализовать. Временный или взломанный код отладки я помечаю с помощью «// NYI delete», чтобы не забыть вернуться и удалить его.

Для удаления неиспользуемого кода я недавно написал сценарий, который: проверяет, все ли зарегистрировано и что он построен чисто, затем просмотрел каждый файл .h в проекте, очистил его и связанный с ним файл .c / .cpp / .m / .mm, а затем выполнил тестовую сборку. Если он все еще построен, он продолжается, в противном случае он откатывает этот файл и переходит к следующему файлу заголовка. После завершения сценария я проверил статус подрывной деятельности, чтобы увидеть, от каких файлов, по его мнению, можно избавиться. Мне также нужно было избегать любых файлов, которые использовались ресурсами. Это сработало довольно хорошо.

Я хочу написать сценарий, который просматривает все файлы и удаляет каждую строку импорта # include / # и проверяет, компилируется ли она, чтобы удалить все лишние включения, но у меня нет времени, чтобы это.

После завершения сценария я проверил статус подрывной деятельности, чтобы увидеть, от каких файлов, по его мнению, можно избавиться. Мне также приходилось избегать любых файлов, которые использовались ресурсами. Это сработало довольно хорошо.

Я хочу написать сценарий, который просматривает все файлы и удаляет каждую строку импорта # include / # и проверяет, компилируется ли она, чтобы очистить все лишние включения, но у меня нет времени, чтобы это.

После завершения сценария я проверил статус подрывной деятельности, чтобы увидеть, от каких файлов, по его мнению, можно избавиться. Мне также приходилось избегать любых файлов, которые использовались ресурсами. Это сработало довольно хорошо.

Я хочу написать сценарий, который просматривает все файлы и удаляет каждую строку импорта # include / # и проверяет, компилируется ли она, чтобы очистить все лишние включения, но у меня нет времени, чтобы это.

1
ответ дан 18 December 2019 в 11:59
поделиться