【发布时间】:2012-04-01 10:01:56
【问题描述】:
我正在为 iOS 5 创建一个应用程序,并且正在绘制一些渐变。以下渐变代码我在 ARC 之前一直使用,但现在它在我的设备上不再工作了(但是,它在模拟器上工作)当我多次使用它时(所以我认为这是一个内存管理问题)。无论如何,这是代码:
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat locations[] = { 0.0, 1.0 };
NSArray *colors = [NSArray arrayWithObjects:(__bridge id)startColor, (__bridge id)endColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);
CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
CGContextSaveGState(context);
CGContextAddRect(context, rect);
CGContextClip(context);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);
CGGradientRelease(gradient);
最初没有 __bridge 语句,我按照 Xcode 的建议添加了它们。究竟是什么导致了这个问题?
【问题讨论】:
-
在堆栈跟踪中什么时候崩溃?我能想到它可能会失败的几点。绘制渐变、创建渐变等时是否失败?
-
当我与 objc 对象进行 __bridge 对话时,它会崩溃。
标签: core-graphics automatic-ref-counting gradient