Попытка получить значение CGColor из свойства вызывает сбой - PullRequest
2 голосов
/ 18 июля 2010

Я пытаюсь установить свойство так -

-interface:

@property (readwrite, assign) CGColorRef otherBallColor;

-someMethod:

CGColorRef ballColor = [UIColor colorWithRed:255.0/256.0 green:165.0/256.0 blue:239.0/256.0 alpha:1.0].CGColor;  
[self setOtherBallColor:ballColor];

Как только я пытаюсь получить доступ к значению, происходит сбой -

-someOtherMethod (в данном случае drawRect):

CGContextSetFillColorWithColor(context, otherBallColor);

Но если в "SomeMethod" я сделаю -

CGColorRef ballColor = [UIColor blueColor].CGColor;

... все отлично работает. Кто-нибудь может объяснить, что происходит?

Большое спасибо (PS, довольно новый для Objective-C, хотя и не программирующий в целом)

Ответы [ 2 ]

5 голосов
/ 18 июля 2010

Вы должны сохранить возвращенный CGColor, ваш [UIColor colorWith ...] создает автоматически выпущенный экземпляр, поэтому, когда он выходит за рамки (я имею в виду, автоматически выпущенный), соответствующий CGColor также освобождается.* Я бы порекомендовал вам использовать UIColor вместо CGColorRef, если это возможно в этом случае.

1 голос
/ 21 июня 2012

Поговорим о позднем ответе, но у меня есть альтернативное решение этой конкретной проблемы, с которым я столкнулся совсем недавно.Я нашел этот вопрос до решения, поэтому я решил добавить свои два цента.Оказывается, что UIColor имеет метод экземпляра, называемый setFill, который устанавливает получателя в качестве текущего цвета заливки контекста.Таким образом, вы могли бы написать:

CGContextRef myContext = UIGraphicsGetCurrentContext();
[[UIColor colorWithRed:255.0/255.0 green:165.0/255.0 
                  blue:239.0/255.0 alpha:1.0] setFill];
CGContextFillPath(myContext);

Я считаю это более чистым решением, потому что вам не нужно беспокоиться о сохранении или последующем освобождении CGColor с.Фактически вам даже не нужно иметь дело с какими-либо командами настройки цвета заливки Core Graphics, такими как CGContextSetFillColorWithColor.

Метод - (void)setFill можно проверить более подробно в документации UIColor Apple .

...