UIGraphicsGetCurrentContext () короткое время жизни

У меня есть представление, которое реализует рисование от руки, но у меня есть небольшая проблема. Я заметил на iPad 3, что все пошло к черту, поэтому я попытался обновить свой код рисования (вероятно, как я должен был сделать в первую очередь), чтобы обновить только ту часть, которая была поглажена. Тем не менее, первый ход после открытия и первый ход после примерно 10 секунд простоя являются чрезвычайно медленными. После того, как все "подогревается" он гладкий, как масло, и занимает всего около 0,15 мс на один оборот. Я не знаю почему, но весь прямоугольник вида помечается как грязный для первого drawRect и первого drawRect после простоя (тогда для обновления требуется около 150 мс). Трассировка стека показывает, что мой прямоугольник переопределяетсяCABackingStoreUpdate_

Я пытался не рисовать слой, если прямоугольник был огромным, но тогда весь мой контекст стал пустым (появится снова, когда я нарисую старые области, как лотерейный билет). Кто-нибудь есть какие-либо идеи, что происходит с UIGraphicsGetCurrentContext ()? Это единственное место, где я могу себе представить, в чем проблема. То есть контекст моего представления был вырван контекстным джином, поэтому он должен снова полностью отрисоваться. Могу ли я использовать какой-либо параметр для сохранения того же контекста? Или здесь происходит что-то еще ... нет необходимости обновлять полный прямоугольник после первоначального отображения.

Мой drawRect очень прост:

- (void)drawRect:(CGRect)rect
{
    CGContextRef c = mDrawingLayer ? CGLayerGetContext(mDrawingLayer) : NULL;
    if(!mDrawingLayer)
    {
        c = UIGraphicsGetCurrentContext();
        mDrawingLayer = CGLayerCreateWithContext(c, self.bounds.size, NULL);
        c = CGLayerGetContext(mDrawingLayer);
        CGContextSetAllowsAntialiasing(c, true);
        CGContextSetShouldAntialias(c, true);
        CGContextSetLineCap(c, kCGLineCapRound);
        CGContextSetLineJoin(c, kCGLineJoinRound);
    }

    if(mClearFlag)
    {
        CGContextClearRect(c, self.bounds);
        mClearFlag = NO;
    }

    CGContextStrokePath(c);
    CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
    CGContextDrawLayerInRect(UIGraphicsGetCurrentContext(), self.bounds, mDrawingLayer);
    NSLog(@"%.2fms : %f x %f", (CFAbsoluteTimeGetCurrent() - startTime)*1000.f,  rect.size.width, rect.size.height);

}

Ответы на вопрос(1)

Ваш ответ на вопрос