Ошибка в UIKit метод рисования строк?
Чтобы воспроизвести сбой, с которым я столкнулся в своем приложении, мне пришлось создать пример со слегка преувеличенной частотой повторения, который может быть непрактичным, но демонстрирует, что именно происходит в моем приложении. При рисовании строки NSString в фоновом потоке, используяNSOperations
иногда происходит сбой с последним вызовом в трассировке стека передWebCore::FontFallbackList::~FontFallBackList().
- (void)viewDidLoad
{
queue = [[NSOperationQueue alloc] init];
[NSTimer scheduledTimerWithTimeInterval:0.0001 target:self selector:@selector(timerDidFire:) userInfo:nil repeats:YES];
}
-(void)timerDidFire:(NSTimer*)timer
{
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
CGRect rect = CGRectMake(0, 0, 50, 50);
UIGraphicsBeginImageContextWithOptions(CGSizeMake(rect.size.width, rect.size.height), YES, 0.0);
NSString *string = @"Sd";
[string drawInRect:rect withFont:[UIFont boldSystemFontOfSize:12] lineBreakMode:UILineBreakModeTailTruncation];
UIGraphicsEndImageContext();
}];
[queue addOperation:op];
}
Вы можете легко воспроизвести этот сбой с кодом выше. У кого-нибудь есть понимание природы этого крушения и почему это может произойти?
(решение этой проблемы заключается в установке[queue setMaxConcurrentOperations:1];
)