2010-07-25 74 views
0

使用此代码会导致总线错误。有人能指出它有什么问题吗?我正在重写CALayer提供的一种方法。为什么这段代码打乱了CGColor会导致总线错误?

- (void) setBackgroundColor:(CGColorRef)c 
{ 
    float *components = (float *)CGColorGetComponents(c); 
    [super setBackgroundColor:[LOLColors colorWithRed:components[0] green:components[1] blue:components[2] alpha:transparencyLevel]]; 
} 

P.S.colorWithRed:green:blue:alpha是一种完美无缺的类方法

这就是原型:

+ (CGColorRef) colorWithRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha 
+0

虽然将值类型转换为其他类型(如'CGFloat'到'float')应该永远不会成为问题,但在将指针类型转换为其他类型时,我会小心。如果'CGFloat'实际上不是'float'的大小,你会遇到严重的问题。 – zneak 2010-07-25 20:46:23

回答

0

再次,通过试验和错误想通。

大小*组件数组小于2,所以我正在访问不存在的成员。

+0

我是一个可怕的编码器。 – 2010-07-25 21:03:32

相关问题