Objective-C - Где здесь утечка? - PullRequest
0 голосов
/ 28 ноября 2011

Приборы показывают мне, что у меня есть утечка в следующем коде:

            CGContextMoveToPoint(c, startPoint.x, self.frame.size.height - offsetYBottom);
            CGContextAddLineToPoint(c, startPoint.x, startPoint.y);
            CGContextAddLineToPoint(c, endPoint.x, endPoint.y);
            CGContextAddLineToPoint(c, endPoint.x, self.frame.size.height - offsetYBottom);
            CGContextClosePath(c);

            CGGradientRef myGradient;
            CGColorSpaceRef myColorspace;

            size_t num_locations = 2;
            CGFloat locations[2] = { 0.0, 1.0 };
            CGFloat components[8] = { 0.0/255.0, 197.0/255.0, 254.0/255.0, 1.0f, 0.0/255.0, 197.0/255.0, 254.0/255.0, 0.25f };

            myColorspace = CGColorSpaceCreateDeviceRGB();
            myGradient = CGGradientCreateWithColorComponents (myColorspace, components, locations, num_locations);

            CGPoint myStartPoint, myEndPoint;
            myStartPoint.x = self.frame.size.width / 2;
            myStartPoint.y = 0.0;
            myEndPoint.x = self.frame.size.width / 2;
            myEndPoint.y = self.frame.size.height;

            CGContextSaveGState(c);
            CGContextClip(c);
            CGContextDrawLinearGradient (c, myGradient, myStartPoint, myEndPoint, 0);
            CGContextRestoreGState(c);

Если я прокомментирую эту часть, утечки исчезнут.startPoint и endPoint - это CGPoint.

Ответственный абонент: CGTypeCreateInstanceWithAllocator.

В чем может быть проблема?

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Следуя Создать правило , вы должны отпустить myColorspace и myGradient, когда закончите с ними:

CGColorSpaceRelease(myColorspace);
CGGradientRelease(myGradient);
1 голос
/ 28 ноября 2011

Попробуйте освободить объект myGradient

CGGradientRelease(myGradient);
...