это потому, что mapviewController все еще существует с аннотациями карты, просто удалите все аннотации, прежде чем переключать ниже необходимый код: -
for (int i =0; i < [mapView.annotations count]; i++) {
if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotationClass class]]) {
[mapView removeAnnotation:[mapView.annotations objectAtIndex:i]];
}
}
Это препятствует тому, чтобы CLR загрузил модуль, на который ссылаются, во времени выполнения. Это уменьшит время запуска (так как оно занимает время для загрузки каждого модуля). В зависимости от размера модуля это могло бы заметно уменьшить время запуска.
Один способ протестировать это состоит в том, чтобы создать тест проект WinForms, добавить ссылку на блок, который не используется (например, Система. Сеть) затем выполненный и присоединение к исполняемому файлу (например, F5). Просмотрите загруженные модули (Отладка-> Windows-> Модули), и Вы будете видеть, что блок, на который ссылаются, был загружен.
Если бы Вы думаете об этом, CLR было бы довольно трудно определить, используется ли зависимость (это находится в декларации как зависимость, после того как Вы добавляете ссылку на него) действительно... Тем более, что выполнение некоторых путей выполнения кода не может быть известно заранее...
Visual Studio 2008 также имеет функцию для удаления неиспользованных директив использования.
Удаление неиспользованного кода делает код более опрятным, но можно также снизить риск конфликтов. Иногда существуют классы с тем же именем в различных блоках. Например, существует Image
класс оба в System.Drawing
и System.Web.UI.WebControls
. Если Вы имеете директивы использования для обоих пространств имен и начинаете использовать класс Изображения, компилятор не может сказать который из тех использовать.
Кроме исходных файлов, являющихся меньшим, я думаю, что просто лучше иметь чистый исходный файл, который не имеет никакого неиспользованного кода или ссылок.
Это - оптимизация для создания компиляции проекта быстрее. Это старается не иметь метаданные загрузки компилятора, которые никогда не будут использоваться. Это - незначительное, хотя, я предположил бы приблизительно 50 мс, в зависимости от скорости Вашего жесткого диска и состояния кэша файловой системы.
Компилятор C# достаточно умен, чтобы только испустить .assembly ссылки в метаданных Вашего скомпилированного блока для блоков, которые на самом деле используются. Таким образом, Вы не генерируете собственные изображения для блоков, Вы не используете при выполнении Ngen.exe. JIT-компилятор не будет затронут так или иначе, он только загружает блоки по мере необходимости для перевода IL.