내가 코어 플롯의 소스를 통해 읽고 CPTColor
이 코드를 가로 질러 달렸다 : 자체에 다른 값을 할당 initWithCGColor
의 슈퍼 클래스에내 클래스의 지정된 초기화 프로그램을 self로 호출 한 결과를 할당해야합니까?
-(id)initWithCGColor:(CGColorRef)newCGColor
{
if ((self = [super init])) {
CGColorRetain(newCGColor);
cgColor = newCGColor;
}
return self;
}
-(id)initWithComponentRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
{
CGFloat colorComponents[4];
colorComponents[0] = red;
colorComponents[1] = green;
colorComponents[2] = blue;
colorComponents[3] = alpha;
CGColorRef color = CGColorCreate([CPTColorSpace genericRGBSpace].cgColorSpace, colorComponents);
[self initWithCGColor:color];
CGColorRelease(color);
return self;
}
[self initWithCGColor:color];
하면 결과를, 그 새로운 값은 initWithComponentRed:green:blue:alpha:
에서 반환됩니다 ?
다른 말로하면 두 개의 init 메소드에서 self
은 동일한 변수 두 개의 별개의 변수입니까? 코드가 변경되지 않는 한 self
가 (. 전 당신이 컬러 캐시를 구현한다면) 변경 initWithComponentRed:green:blue:alpha:
가 잘못된 개체를 반환한다면
그것이 내가 생각한 것이지만 그것을 확인하고 싶었습니다. 확실하게하기 위해, 나는 수퍼 클래스가'self'를 릴리즈하고 알파 채널이 0이면 nil을 반환하는 간단한 테스트 프로그램을 작성했습니다.이 경우 하위 클래스의 초기화 프로그램은 올바른 값 'nil'대신 잘못된 참조를 반환합니다. – SSteve
@SSteve : 좋아요. 기꺼이 도와 드리겠습니다. –
정확합니다. 이 문제가 해결되었습니다. http://code.google.com/p/core-plot/source/detail?r=082ab717a53aa158003b9d8cdd376faeef3fd9ce를 참조하십시오. –