DrawRect ---- утечка памяти - PullRequest
2 голосов
/ 19 января 2012

В настоящее время я вижу проблему с утечками памяти, кажется, это происходит из этого кода:

- (void)drawRect:(CGRect)rect
{

    CGImageRef cgImage = CGBitmapContextCreateImage(offScreenBuffer);
    UIImage *uiImage = [[UIImage alloc] initWithCGImage:cgImage];

    CGImageRelease(cgImage);

    [uiImage drawInRect:self.bounds];
    [uiImage release];

}

этот метод вызывается из событий касаний ...

-(void)drawPoint:(UITouch *)touch {  

    currentLoc = [[PointLocation alloc] init];

    currentLoc.location = [touch locationInView:self];

    self.previousPoint = self.point;

    self.point = currentLoc;
    [self drawToBuffer];

    [currentLoc release];

}

это отрисовка в буфер ....

-(void)drawToBuffer {


    CGFloat color[4] = {R,G,B,A};

    if (self.previousPoint != nil) {
    CGContextSetRGBStrokeColor(offScreenBuffer, color[0],color[1],color[2],color[3]);

    CGContextBeginPath(offScreenBuffer);
    CGContextSetLineWidth(offScreenBuffer, lane);
    CGContextSetLineCap(offScreenBuffer, kCGLineCapRound);

    CGContextMoveToPoint(offScreenBuffer, previousPoint.location.x, previousPoint.location.y);
    CGContextAddLineToPoint(offScreenBuffer, point.location.x, point.location.y);

    CGContextDrawPath(offScreenBuffer, kCGPathStroke);

}
 [self setNeedsDisplay];

}

это действительно медленно .... :( И я не знаю почему ...

Каждый раз, когда я рисуювыбранный вид, это называется, но каждый раз, когда мне нужно создать изображение и показать его на экране. Есть ли возможность, как это сделать по-другому ??

Ответы [ 3 ]

0 голосов
/ 19 января 2012

Размещенный код внутри drawRect не должен показывать никаких утечек, так как изображения выпущены правильно.

0 голосов
/ 20 января 2012

Я сейчас решил эту проблему.Проблема была в том, чтобы снова сохранить в памяти данных изображение определенного размера.Мне нужно создать API рисования с самого начала, это заняло некоторое время, но это было лучше, чем обновление нефункциональной версии.Спасибо всем за сотрудничество =)

0 голосов
/ 19 января 2012

Учитывая эту информацию, единственная возможная утечка, которую я могу себе представить, может быть связана с offScreenBuffer.
Если вы показываете больше кода или следы инструментов, это может помочь найти проблему.

Также, учитывая «РАЗМЕР» утечки памяти, вы можете увидеть, является ли это изображение, которое при утечке или что-то еще, и вы неправильно читаете отчеты инструментов.

...