我需要在後臺線程上繪製文本以將其保存爲圖像。如何在iOS的後臺線程上繪製文本?
我做
UIGraphicsPushContext()
[NSString drawInRect:]
UIGraphicsPopContext()
的代碼工作正常,但有時在drawInRect崩潰時,我也同時繪製在主線程上。
我試着按照這裏建議的方式使用NSAttributedString: UIStringDrawing methods don't seem to be thread safe in iOS 6。但[NSAttributedString drawInRect:]似乎沒有渲染任何東西在我的後臺線程出於某種原因。主線程似乎工作正常,但。
我一直在想使用核心文本的,不過貌似核心文本也有類似的問題:CoreText crashes when run in multiple threads
有沒有繪製文本線程安全的方式?
UPDATE: 如果我運行這段代碼,它幾乎立即drawInRect崩潰與EXC_BAD_ACCESS:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
UIGraphicsBeginImageContextWithOptions(CGSizeMake(100, 100), NO, 0);
UIFont* font = [UIFont systemFontOfSize:14.0f];
for (int i = 0; i < 100000000; i++) {
[@"hello" drawInRect:CGRectMake(0, 0, 100, 100) withFont:font];
}
UIGraphicsEndImageContext();
});
UIGraphicsBeginImageContextWithOptions(CGSizeMake(100, 100), NO, 0);
UIFont* font = [UIFont systemFontOfSize:12.0f];
for (int i = 0; i < 100000000; i++) {
[@"hello" drawInRect:CGRectMake(0, 0, 100, 100) withFont:font];
}
UIGraphicsEndImageContext();
如果我刪除UIFont,只是沒有繪製字體的文本,它工作正常。
UPDATE: 這似乎只崩潰在iOS 6.1,但似乎在iOS 7.1做工精細。
我想要幫助解決問題,發佈實際的代碼給你的問題,並提供有關崩潰的細節。 – rmaddy