2009-10-04 2 views
3

В документации на яблоки указано, что в целом Quartz2D составляет thread-safe. Однако при обращении к контексту изображения во время NSOperation у меня возникают сбои (EXC_BAD_ACCESS).Резьбовой рисунок на iPhone

Это моя текущая настройка:

UIGraphicsBeginImageContext(imageSize); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
// drawing code 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Я подозреваю, что сбои связаны с текущим контекстом как доку UIGraphicsGetCurrentContext утверждает, что она должна быть вызвана из main thread. Это верно? Есть ли другие способы получить контекст изображения?

+1

Нет, это не правильно, документы решили солгать вам за простое удовольствие ... –

ответ

3

Вы ответили на свой вопрос. Документы говорят, что вы должны вызывать UIGraphicsGetCurrentContext() в основном потоке, вы этого не делаете, и ваше приложение рушится. QED.

+0

Благодарим вас за ответ. Какой был бы правильный способ сделать это? Сейчас я просматриваю CGBitmapContextCreate. –

+0

Правильный способ сделать это - разбить UIGraphicsGetCurrentContext на отдельный вызов, который вы запускаете в основном потоке, и сохранить графический контекст в переменной класса, которую другой поток использовал бы при возврате из create. –

+0

@ Kendall-Helmstetter-Gelner Это было бы Чрезвычайно плохая идея. Это не API, предназначенный для использования из фонового потока. Ваше предложение оставляет открытым некоторые очень грубые условия гонки –

4

Различные функции UIGraphics - это в основном просто удобные методы для функций нижнего уровня. Прочитайте CGGraphicsContext и как создать свой собственный; документация очень полезна.