为了复制我在应用程序中遇到的崩溃,我必须创建一个重复率略高的示例,这可能不切实际,但可以准确地演示我的应用程序中发生的情况。在使用 NSString 在后台线程上绘制 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];
)