Сбой только в выпуске при наличии #if Debug в определенном месте. Очень странно

#ios #swift

#iOS #swift

Вопрос:

Я разработал свое приложение в режиме отладки и успешно работал без каких-либо проблем. Затем, когда я переключаюсь в режим выпуска, он падает в той части, где я прошу его загрузить изображение из сети. XCode сообщает мне о bad_Access и дает мне стек, но я не могу его понять.

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

Тогда это меня так удивило, что, когда я процитировал приведенный ниже код, это решило проблему.

введите описание изображения здесь

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

Я понятия не имею, почему это произошло.

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

Вот подробное описание того, где я использовал этот макрос и вызвал сбой.

У меня есть класс network manager, в этом классе у него есть статическая функция, которая вызывает API alamofire для извлечения файла JSON. Статический класс имеет полный параметр, который принимает блок, который вызывается, когда alamofire завершил свою работу. В этом полном блоке я создал объекты каждого элемента, используя этот файл JSON (содержит массив). После создания элемента в том же блоке я вызываю другую функцию, которая вызывает другой статический метод в классе network manager, чтобы загрузить изображение с URL-адреса, который я получил в файле JSON. перед вызовом этого статического метода я использую printMsg, чтобы распечатать, что я собираюсь загрузить изображение, и именно здесь происходит сбой из-за #if DEBUG

Сначала я подумал, что, вероятно, мне не следует вызывать этот статический метод внутри NetworkManger для загрузки изображения, но проблема в том, что #if используется в функции печати, которая меня шокирует.

Итак, мой вопрос в том, почему это происходит?

Комментарии:

1. Вы устали перемещать весь этот код в сам блок завершения без функции?

2. @lostAtSeaJoshua Нет, у меня нет. Я пойду и попробую это во вторник

3. @lostAtSeaJoshua Очень странно. Похоже, проблема исчезает после долгих выходных в день благодарения. При вызове этой функции он больше не зависал. Я обещаю, что я вообще ничего не сделал для решения этой проблемы.

4. Одна из тех призрачных ошибок, они случаются время от времени. Рад слышать, что он работает так, как ожидалось. @JerryShan