分配自定义UIColor到类属性的问题

时间:2019-07-16 08:55:26

标签: objective-c methods uicolor cgcolor

将自定义UIColor传递给我创建的方法时遇到麻烦。

基本上,我有一个扩展UIButton类的类,在其中可以将所需的任何颜色分配给该类的不同属性(通常进行修改)。为此,我通常必须将事物的颜色设置为“ uiColorParameter.CGColor”或“ uiColorParameter”。我的问题是,当我将自定义颜色作为参数传递时(例如,不是[UIColor whiteColor],而是[UIColor colorWithRed:...],应用程序崩溃并显示错误消息“线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x20)”。

在视图控制器中使用该类的

2倍。

[_beginButton updateButtonBorderWithCornerRadius:10 borderWidth:2.75 borderColor:[RoundedButton appRedColor]];
[_beginButton setEventEffectsWithColor:[UIColor redColor] secondColor:[RoundedButton appRedColor]];

在自定义类H

@property (assign) UIColor *pColor;
@property (assign) UIColor *sColor;

在自定义类中

- (void)updateButtonBorderWithCornerRadius:(CGFloat)bRadius borderWidth:(CGFloat)bWidth borderColor:(UIColor *)bColor
{
    self.layer.cornerRadius = bRadius;
    self.layer.borderWidth = bWidth;
    self.layer.borderColor = bColor.CGColor;
}

- (void)setEventEffectsWithColor:(UIColor *)fColor secondColor:(UIColor *)sColor
{
    [self setPrimaryBorderColor:fColor];
    [self setSecondaryBorderColor:sColor];

    [self addTarget:self action:@selector(highlight) forControlEvents:UIControlEventTouchDown];
    [self addTarget:self action:@selector(unhighlight) forControlEvents:UIControlEventTouchUpInside];
    [self addTarget:self action:@selector(unhighlight) forControlEvents:UIControlEventTouchDragExit];
}

- (void)highlight
{
    self.layer.borderColor = pColor.CGColor;
    self.titleLabel.textColor = pColor;
}

- (void)unhighlight
{
    self.layer.borderColor = sColor.CGColor; //Where the error occurs
    self.titleLabel.textColor = sColor;
}

- (void)setPrimaryBorderColor:(UIColor *)color
{
    pColor = color;
}

- (void)setSecondaryBorderColor:(UIColor *)color
{
    sColor = color;
}

+ (UIColor *)appRedColor
{
    return [UIColor colorWithRed:0.68 green:0.14 blue:0.09 alpha:1];
}

第一个方法“ updateButtonBorder ...”工作完全正常,没有错误。但是,对于第二种方法,无论您如何通过自定义UIColor(如我所做的一样,是否具有类变量,或者作为文字[UIColor colorWithRed:...]),它将崩溃。但是,例如,如果我发送普通的[UIColor whiteColor],它将非常正常...

1 个答案:

答案 0 :(得分:0)

由于pColorsColor属性被声明为assign而不是strong,因此存在内存管理问题。

它似乎适用于系统颜色,因为这些系统颜色实例可能由UIKit保存在内存中。但是您的自定义颜色不是。

更改:

@property (assign) UIColor *pColor;
@property (assign) UIColor *sColor;

收件人:

@property (nonatomic, strong) UIColor *pColor;
@property (nonatomic, strong) UIColor *sColor;

您很少(如果有的话)将assign与对象指针一起使用。