ios - 为什么使用 [UIColor colorWithRed :gred:blue:alpha] lead to EXC_BAD_ACCESS?

标签 ios objective-c uiview uicolor

我已经创建了一个自定义的 UIView 子类,它应该绘制一条简单的虚线。为了定义线条的颜色,我添加了一个可检查属性 lineColor

// LineView.h
@interface LineView : UIView
@property (nonatomic,assign) IBInspectable UIColor *lineColor;
@end

// LineView.m
- (id)initWithFrame:(CGRect)frame{
    if((self = [super initWithFrame:frame])){
        [self setupView];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder{
    if((self = [super initWithCoder:aDecoder])){
        [self setupView];
    }
    return self;
}


- (void)setupView {
    self.lineColor = [UIColor colorWithRed:0 green:0 blue:255.0 alpha:1.0];
    //self.lineColor = [UIColor blueColor];  <-- No Problem

    [self refreshLine];
}

- (void)layoutSubviews {
    [super layoutSubviews];
    [self refreshLine];
}

- (void)refreshLine {    
    CGColorRef cgLineColor = self.lineColor.CGColor;  // <--CRASH
    ...
}
  • 如果在 Interface Builder 中分配了颜色,则一切正常
  • 如果分配了像 [UIColor blueColor] 这样的默认颜色,一切正常
  • 如果像 [UIColor colorWithRed:0 green:0 blue:255.0 alpha:1.0] 这样的自定义颜色,应用会崩溃并显示 EXC_BAD_ACCESS

[UIDeviceRGBColor respondsToSelector:]: message sent to deallocated instance 0x6000022d08c0

这是为什么?

最佳答案

当你使用[UIColor blueColor]时,你并没有创建对象;你得到它的引用,其他东西管理它的生命周期。

当您初始化一个新的 UIColor 对象时,您有责任确保它在使用时仍然有效。 “赋值”不会增加对象的引用计数; “强”确实如此。

关于ios - 为什么使用 [UIColor colorWithRed :gred:blue:alpha] lead to EXC_BAD_ACCESS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55431472/

相关文章:

iphone - ios tableview 动态原型(prototype)在 Storyboard 中不起作用

ios - 是否有适用于 ios 的良好 CSV 解析器?

iOS 验证应用安装成功

objective-c - iOS 6 中具有自动布局的动态 UIView 高度

ios - CALayer 未在设备/模拟器上显示

ios - 创建 uiview 并在 iOs 中呈现它们的最佳实践

ios - 如何在苹果 map 上加载JSON数据以放置标记IOS

ios - 从 UIWebView 中删除控制中心中的信息和控件

ios - 如何像 UITableViewCell 一样重用 UIView

ios - 制作一个出现在 xcode 项目中所有 .NIb 文件上的 UIVIew