objective-c – DCRoundSwitch在使用ARC时给出EXC_BAD_ACCESS

我正在使用 DCRoundSwitch的项目,我基本上需要一个UISwitch,我可以编辑它的标签内容.

因为我正在使用ARC,所以我将DCRoundSwitch代码重构为xcode中的ARC兼容.

当在模拟器中编译和运行时,它没有任何问题.

但是,当在设备上运行时,它会在DCRoundSwitchKnobLayer.m的第57行附近提供EXC_BAD_ACCESS

在GitHub有一个bug report,但没有找到解决方案.

以下是EXC_BAD_ACCESS的代码

CGGradientRef CreateGradientRefWithColors(CGColorSpaceRef colorSpace,CGColorRef startColor,CGColorRef endColor)
{
    CGFloat colorStops[2] = {0.0,1.0};
    CGColorRef colors[] = {startColor,endColor};

    //THIS LINE BREAKS THE PROGRAM
    CFArrayRef colorsArray = CFArrayCreate(NULL,(const void**)colors,sizeof(colors) / sizeof(CGColorRef),&kcfTypeArrayCallBacks); 

    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace,colorsArray,colorStops);
    CFRelease(colorsArray);
    return gradient;
}

任何线索将不胜感激.

编辑:这里是xcode的局部变量:

解决方法

colorsArray使用CFRelease方法发布. ARC不允许使用保留和释放,所以为什么不尝试评论行CFRelease(colorsArray),看看是否阻止了错误

编辑 –

该答案被接受,因为它通过禁用ARC提供了对OP的问题的有效修复.

如果您不想使用此方法,请参阅@ petesh的答案.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...