Я только что провел день, выискивая действительно странную ошибку. Это был переизданный UILabel, хотя в коде не было перевыпуска. Если я прокомментировал выпуск метки, код был в порядке.
Я отследил его до UIView, который был выпущен в фоновом потоке. Что не кажется правильным, так как вы должны получить доступ ко всем элементам пользовательского интерфейса из основного потока. Затем я нашел файл пера, который загружался в фоновом потоке, используя:
[[NSBundle mainBundle] loadNibNamed:@"nib name" owner:self options:nil];
Мне не нужно вдаваться в детали того, что делал код, но мой вопрос:
Если loadNibNamed вызывается в фоновом потоке, а загруженное представление кэшируется процессом загрузки пера, то основной поток также хочет загрузить этот перо - но загружает его из кэша. Когда мой объект освобождается - изображение, загруженное из пера в фоновом режиме, также освобождается в фоновом режиме? Не имеет смысла, так как фоновый поток больше не будет существовать ....
Я не знаю, но я решил это, обернув часть кода loadNibNamed в GCD-распределении синхронно в основной поток.