Что нового в iOS: iOS 4.0 говорит это:
- Рисование в графическом контексте в UIKit теперь является потокобезопасным. В частности:
- Процедуры, используемые для доступа к графическому контексту и манипулирования им, теперь могут корректно обрабатывать контексты, находящиеся в разных потоках.
- Рисование строк и изображений теперь поточно-ориентировано.
- Использование объектов цвета и шрифта в нескольких потоках теперь безопасно.
Похоже, вы пробовали что-то вроде этого:
UIGraphicsBeginImageContextWithOptions(size,false,0);
dispatch_async(someQueue, ^{
[UIColor.whiteColor setFill];
UIRectFill(0, 0, 20, 20);
dispatch_async(dispatch_get_main_queue(), ^{
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.imageView.image = image;
});
};
Это не сработает, потому что каждый поток имеет свой собственный стек графических контекстов (начиная с iOS 4.0). Вам нужно сделать это так:
dispatch_async(someQueue, ^{
UIGraphicsBeginImageContextWithOptions(size,false,0);
[UIColor.whiteColor setFill];
UIRectFill(0, 0, 20, 20);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
};
UPDATE
Документация для UIGraphicsBeginImageContextWithOptions
и другие графические функции UIKit теперь говорят
В iOS 4 и более поздних версиях вы можете вызывать эту функцию из любого потока вашего приложения.
Документация для UIColor
говорит
Цветные объекты являются неизменяемыми, поэтому их можно безопасно использовать из нескольких потоков в вашем приложении.
Документация для UIFont
говорит
Объекты шрифта являются неизменяемыми, поэтому их можно безопасно использовать из нескольких потоков в вашем приложении.
Однако , документация для дополнений, выводящих UIKit NSString
, говорит
Методы, описанные в этом расширении класса, должны использоваться из основного потока вашего приложения.
Так что вы должны не попробовать что-то вроде [@"hello" drawAtPoint:CGPointZero withAttributes:attrs]
из фонового потока.