Fehler beim Zeichnen von UIKit-Strings?

Um einen Absturz, den ich in meiner Anwendung hatte, zu replizieren, musste ich ein Beispiel mit einer leicht übertriebenen Wiederholungsrate erstellen, die möglicherweise nicht praktikabel ist, aber genau demonstriert, was in meiner App passierte. Beim Zeichnen eines NSStrings auf einem Hintergrund-Thread mitNSOperationskommt es manchmal zu einem Absturz, wobei der letzte Aufruf auf dem Stack-Trace vor dem Absturz erfolgtWebCore::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];
}

Sie können diesen Absturz einfach mit dem obigen Code replizieren. Wer hat einen Einblick in die Art dieses Absturzes und warum könnte es passieren? (Die Lösung für dieses Problem ist die Einstellung[queue setMaxConcurrentOperations:1];)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage