속성에서 CGColor 값을 가져 오려고 노력하면 충돌이 발생합니다.
-
17-09-2020 - |
문제
나는 속성을 그렇게 설정하려고 노력하고 있습니다 -
- 인터페이스 :
@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 (이 경우 드로피) :
CGContextSetFillColorWithColor(context, otherBallColor);
.
하지만 "Somemethod"에있는 경우 -
CGColorRef ballColor = [UIColor blueColor].CGColor;
.
... 모두 잘 작동합니다.아무도 무슨 일이 일어나고 있는지 설명 할 수 있습니까?
많은 감사합니다 (추신, objective-c. 일반적으로 프로그래밍하지 않음)
해결책
반환 된 CGColor를 유지해야하며, [UIColor Colorwith ...]는 자동으로 릴리스 된 인스턴스를 생성하므로 해당 CGColor가 해제됩니다.
이 경우에 가능하면 cgcolorref 대신 UIColor를 사용하는 것이 좋습니다.
다른 팁
늦은 답변에 대해 이야기하지만, 나는이 특별한 문제에 대한 대안적인 해결책을 가지고 있었는데, 나는 잠시 전에 달렸다.나는이 질문을 해결하기 전에 발견 했으므로 나는 두 개의 센트를 던질 것입니다.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
를 릴리스 할 필요가 없기 때문입니다.실제로 CGContextSetFillColorWithColor
와 같은 핵심 그래픽 채우기 색상 설정 명령을 처리 할 필요조차 없습니다.
제휴하지 않습니다 StackOverflow