Я использую UIImagePickerController для захвата неподвижного изображения. Затем мне нужно выполнить некоторую обработку, прежде чем сохранять разные копии изображения в хранилище Core Data. На iPhone 4 обработка и сохранение могут занимать до 4-8 секунд, поэтому я пытаюсь перевести работу в фоновую очередь, чтобы не блокировать все приложение и пользовательский интерфейс.
В корне моего вопроса это. Можно ли использовать UIImage в фоновом потоке, если объект UIImage полностью ограничен этим потоком? Я нашел следующее в сводке безопасности потока Apple о NSImage. Я предполагаю, что UIImage будет работать так же.
NSImage Ограничения:
Один поток может создать объект NSImage, нарисовать в буфер изображения и передать его в основной поток для рисования. Базовый кеш изображений распределяется между всеми потоками. Для получения дополнительной информации об изображениях и о том, как работает кэширование, см. Руководство по рисованию какао.
Может ли кто-нибудь подтвердить это, или это просто неправильно - прикасаться к чему-то вроде объекта UIImage вне основного потока. Если использование ограниченного экземпляра UIImage в порядке, то это приводит к другой проблеме. UIImagePickerController возвращает NSDictionary, который является потокобезопасным, но внутри этого NSDictionary является объектом UIImage. Безопасно ли передавать этот словарь другому потоку, а затем использовать содержащийся в нем объект?
Если UIImage в информационном словаре imagePicker небезопасно использовать, то какие-либо предложения о том, как лучше поступить?
Я думаю, что у меня есть реальные проблемы с многопоточностью Core Data. Но для информации я в настоящее время пишу и извлекаю данные изображения, используя NSValueTransformer для преобразования UIImage в и из NSData в пользовательском подклассе NSManagedObject.