У меня есть небольшой метод, который делает некоторые рисунки 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' нет этой проблемы?Любые советы будут с благодарностью.Спасибо.