내 응용 프로그램에서 사용하고있는 섀도우 테이블보기 클래스가 있습니다.ARC에서 연결된 CGColorRef를 비교할 때 왜 충돌이 발생합니까?
ARC로 변환 할 때 몇 가지 사항을 변경해야했습니다. 새로운 클래스에서는 다음 라인에 충돌합니다 : (id)(inverse ? darkColor : lightColor)
to (__bridge id)(inverse ? lightColor : darkColor)
. 콘솔은 말한다 *** -[Not A Type retain]: message sent to deallocated instance 0x4cee70
전 :
- (CAGradientLayer *)shadowAsInverse:(BOOL)inverse
{
CAGradientLayer *newShadow = [[[CAGradientLayer alloc] init] autorelease];
CGRect newShadowFrame =
CGRectMake(0, 0, self.frame.size.width,
inverse ? SHADOW_INVERSE_HEIGHT : SHADOW_HEIGHT);
newShadow.frame = newShadowFrame;
CGColorRef darkColor =
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:
inverse ? (SHADOW_INVERSE_HEIGHT/SHADOW_HEIGHT) * 0.25 : 0.25].CGColor;
CGColorRef lightColor =
[self.backgroundColor colorWithAlphaComponent:0.0].CGColor;
newShadow.colors =
[NSArray arrayWithObjects:
(id)(inverse ? lightColor : darkColor),
(id)(inverse ? darkColor : lightColor),
nil];
return newShadow;
}
후 :
- (CAGradientLayer *)shadowAsInverse:(BOOL)inverse
{
CAGradientLayer *newShadow = [[CAGradientLayer alloc] init];
CGRect newShadowFrame =
CGRectMake(0, 0, self.frame.size.width,
inverse ? SHADOW_INVERSE_HEIGHT : SHADOW_HEIGHT);
newShadow.frame = newShadowFrame;
CGColorRef darkColor =
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:
inverse ? (SHADOW_INVERSE_HEIGHT/SHADOW_HEIGHT) * 0.25 : 0.25].CGColor;
CGColorRef lightColor =
[self.backgroundColor colorWithAlphaComponent:0.0].CGColor;
newShadow.colors =
[NSArray arrayWithObjects:
(__bridge id)(inverse ? lightColor : darkColor),
(__bridge id)(inverse ? darkColor : lightColor),
nil];
return newShadow;
}
그림자 처리 된 테이블보기입니까? –