Основные проблемы с данными при использовании потоков
Я работаю над хобби-проектом, который медленно обновляю в свободное время, чтобы помочь освоить некоторые новые вещи. Один камень преткновения, с которым я столкнулся, - это работа с Core Data в отдельном потоке. Я прочитал документацию Apple по параллелизму Core Data, и все, что я прочитал, показалось достаточно простым, поэтому я начал обновлять свой проект для загрузки данных в фоновый поток, поскольку я не хочу блокировать пользовательский интерфейс во время загрузки.
Проект работает нормально, если объект Core Data загружен в основной поток. Сбой при переключении на фоновую загрузку.
На этом этапе я могу убедиться, что:
- NSManagedObject загружается в поток, и я могу получить доступ к его свойствам
- Вывод данных в стандартный вывод работает нормально и выглядит правильно.
- Двоичное сравнение объекта данных, загруженного в основной поток, и данных, загруженных в фоновом потоке, доказывает, что они идентичны.
Реальная проблема возникает, когда я вызываю реализацию категории на NSData. Я могу убедиться, что объект NSData в порядке, когда он загружен в фоновом потоке, только когда я вызываю функцию для выполнения некоторой работы над объектом NSData после его загрузки, у меня возникает проблема. Проблема в EXC_BAD_ACCESS, которая обычно означает, что адрес объекта неверен, но это не имеет никакого смысла.
Я, вероятно, просто получаю что-то очевидное или простое неправильно - но я просто не вижу леса за деревьями.
Если вы думаете, что можете дать совет по этому поводу, так как это сводит меня с ума, тогда вы можете найти код здесь:
Редактировать пост-ответ: Удален URL, так как проект больше не существует.
1 ответ
Хорошо, я наконец узнал, в чем проблема. Метод декомпрессии превышал размер стека потока и поэтому вызывал странный и случайный EXC_BAD_ACCESS.
Я ожидал, что в этом случае отладчик выдаст более прямую подсказку.
Таким образом, реальная проблема " переполнения стека " решена.