Apple Переход к примечаниям к выпуску ARC содержит подраздел «Компилятор обрабатывает объекты CF, возвращенные из методов какао», в котором в качестве примера используется CAGradientLayer.colors
.Он говорит, что этот код будет работать как есть:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
CAGradientLayer *gradientLayer = (CAGradientLayer *)[self layer];
gradientLayer.colors = [NSArray arrayWithObjects:(id)[[UIColor darkGrayColor] CGColor],
(id)[[UIColor lightGrayColor] CGColor], nil];
gradientLayer.startPoint = CGPointMake(0.0, 0.0);
gradientLayer.endPoint = CGPointMake(1.0, 1.0);
}
return self;
}
Так что, возможно, вам следует попробовать переписать свой код так:
- (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;
UIColor darkColor =
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:
inverse ? (SHADOW_INVERSE_HEIGHT / SHADOW_HEIGHT) * 0.25 : 0.25];
UIColor lightColor =
[self.backgroundColor colorWithAlphaComponent:0.0];
newShadow.colors = inverse
? [NSArray arrayWithObjects:[lightColor CGColor], [darkColor CGColor], nil]
: [NSArray arrayWithObjects:[darkColor CGColor], [lightColor CGColor], nil];
return newShadow;
}