CGColorRef 引用造成EXC_BAD_ACCESS的问题
今天在重写 drawRect的方法时遇到 EXC_BAD_ACCESS的问题
CGContextSetFillColorWithColor(ctx, self.color);
//这一句出现了BAD..
CGContextFillPath(ctx);
原因是由于在init的时候声明了
// @property (nonatomic, assign) CGColorRef color;
self.color = [UIColor colorWithHexString:LIGHT_GRAY_FONTCOLOR].CGColor;
// 改成 self.color = [UIColor redColor].CGColor; 则问题解决 原因未知
查询stackoverflow发现 由于CGColor这样的类型声明 在arc直接会释放掉
所以我改成了 把color作为参数从其他类传递过来
-(SSNaughtyProgressView *)progressView{
if (!_progressView) {
_progressView = [[SSNaughtyProgressView alloc] init];
//如果不设置background 那么在draw rect 中之前的绘制会被叠加 不会清除
//或者设置 opaque 为 false 来指定透明的问题
_progressView.backgroundColor = [UIColor clearColor];
//传递 color cgcolor
_progressView.color = self.lineColor.CGColor;
_progressView.opaque = false;
}
return _progressView;
}
-(UIColor *)lineColor{
if (!_lineColor) {
_lineColor = [UIColor colorWithHexString:LIGHT_GRAY_FONTCOLOR];
}
return _lineColor;
}
问题解决
相关链接:
https://stackoverflow.com/questions/11242688/exc-bad-access-with-arc