将自定义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],它将非常正常...
答案 0 :(得分:0)
由于pColor
和sColor
属性被声明为assign
而不是strong
,因此存在内存管理问题。
它似乎适用于系统颜色,因为这些系统颜色实例可能由UIKit保存在内存中。但是您的自定义颜色不是。
更改:
@property (assign) UIColor *pColor;
@property (assign) UIColor *sColor;
收件人:
@property (nonatomic, strong) UIColor *pColor;
@property (nonatomic, strong) UIColor *sColor;
您很少(如果有的话)将assign
与对象指针一起使用。