CGColorReleaseing штрих-цвет вызывает сбой перед выпуском линии - PullRequest
1 голос
/ 23 февраля 2011

У меня есть небольшой метод, который делает некоторые рисунки CoreGraphics.Сегодня я использовал Clang в XCode для обнаружения и устранения утечек памяти.Он рассказал мне о «rgbColourSpace» и «fillColour» (см. Код ниже).Мне было интересно, почему это не предупредило меня о 'strokeColour', поскольку я тоже не выпустил это.Поэтому я добавил блок в конце метода, который освобождает все три.Как ни странно, мое приложение для iPad зависало бы в строке, указанной ниже, что на самом деле выше строки, в которой я выпускаю 'strokeColour'.

// Retrieve the path for the supplied bedID
CGPathRef path = (CGPathRef)[self.myDictionary objectForKey:bedID];

// Save the graphics state so it can be restored later
CGContextSaveGState(self.bitmapContext);

// Initialise fill and stroke colour
CGColorRef fillColour = [UIColor whiteColor].CGColor;
CGColorRef strokeColour = [UIColor blackColor].CGColor;

// Set the stroke width
CGContextSetLineWidth(self.bitmapContext, 1.0);

// Create a CGColorSpace
CGColorSpaceRef rgbColourSpace = CGColorSpaceCreateDeviceRGB();

// Add the path to the graphics context
CGContextAddPath(self.bitmapContext, path);

// Set the fill colour...
CGContextSetFillColorWithColor(self.bitmapContext, fillColour);
// ...and stroke colour
--> CGContextSetStrokeColorWithColor(self.bitmapContext, strokeColour); // Crashes here

// Draw the path, with fill and stroke
CGContextDrawPath(self.bitmapContext, kCGPathFillStroke);

// Restore the graphics state
CGContextRestoreGState(self.bitmapContext);

// Notify the view to update itself
[self.view setNeedsDisplay];

// Release rgbColorSpace and fillColor
CGColorSpaceRelease(rgbColourSpace);
CGColorRelease(fillColour);
// CGColorRelease(*strokeColour*); -- for some reason we must not release this, or else the app crashes further up.

Это озадачивает меня, но это вполне повторяется.Если я прокомментирую последнюю строку, все работает;с активированной линией происходит сбой на несколько строк выше (строка указана выше).В чем дело?Разве рисунок не происходит, когда я так думаю?Это все происходит позже?И если так, то почему у 'fillColour' и 'rgbColourSpace' нет этой проблемы?Любые советы будут с благодарностью.Спасибо.

1 Ответ

1 голос
/ 25 февраля 2011

Вы не являетесь владельцем fillColour и strokeColour. Не отпускайте их.

...