【问题标题】:Why does this chunk of code breaking up a CGColor cause a Bus Error?为什么这段代码会破坏 CGColor 导致总线错误?
【发布时间】:2010-07-25 20:33:08
【问题描述】:

使用此代码会导致总线错误。有人可以指出它有什么问题吗?我正在覆盖 CALayer 的一个方法。

- (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

【问题讨论】:

  • 虽然将值类型转换为其他类型(如CGFloatfloat)应该永远不会成为问题,但在将指针类型转换为其他类型时我会小心。如果CGFloat 实际上不是float 的大小,那么您将遇到严重的问题。

标签: objective-c calayer


【解决方案1】:

再一次,通过反复试验得出结论。

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

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多