Я пытаюсь понять, как сбой моего кода при использовании очереди, но работает при использовании основного потока. Этот код работает отлично:UIGraphicsGetImageFromCurrentImageContext сбой при использовании очереди
- (void)penMoved:(NSSet *)touches {
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self];
CGPoint midPoint = midpoint(previousPoint, currentPoint);
CGRect bounds = self.bounds;
UIGraphicsBeginImageContextWithOptions(bounds.size, YES, [UIScreen mainScreen].scale);
[path addQuadCurveToPoint:midPoint controlPoint:previousPoint];
[incrementalImage drawAtPoint:CGPointZero];
[path stroke];
previousPoint = currentPoint;
incrementalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self setNeedsDisplay];
}
Но эта версия кода происходит сбой через некоторое время, когда incrementalImage = UIGraphicsGetImageFromCurrentImageContext();
называется.
- (void)penMoved:(NSSet *)touches {
dispatch_async(drawingQueue, ^{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self];
CGPoint midPoint = midpoint(previousPoint, currentPoint);
CGRect bounds = self.bounds;
UIGraphicsBeginImageContextWithOptions(bounds.size, YES, [UIScreen mainScreen].scale);
[path addQuadCurveToPoint:midPoint controlPoint:previousPoint];
[incrementalImage drawAtPoint:CGPointZero];
[path stroke];
previousPoint = currentPoint;
incrementalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
[self setNeedsDisplay];
});
});
}
drawingQueue определяются как Ивар, как это:
dispatch_queue_t drawingQueue;
и инициализируется следующим образом:
drawingQueue = dispatch_queue_create("drawingQueue", NULL);
Сообщите подробности об аварии. – rmaddy
Я не могу. Ошибка возникает только на устройстве, и Xcode не сломается в отладчике, когда это произойдет. Это просто сбой, и Xcode теряет соединение. –
Возможно, вам захочется синхронизировать доступ к вашему ivan. – rmaddy