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

前端之家收集整理的这篇文章主要介绍了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的代码

  1. CGGradientRef CreateGradientRefWithColors(CGColorSpaceRef colorSpace,CGColorRef startColor,CGColorRef endColor)
  2. {
  3. CGFloat colorStops[2] = {0.0,1.0};
  4. CGColorRef colors[] = {startColor,endColor};
  5.  
  6. //THIS LINE BREAKS THE PROGRAM
  7. CFArrayRef colorsArray = CFArrayCreate(NULL,(const void**)colors,sizeof(colors) / sizeof(CGColorRef),&kcfTypeArrayCallBacks);
  8.  
  9. CGGradientRef gradient = CGGradientCreateWithColors(colorSpace,colorsArray,colorStops);
  10. CFRelease(colorsArray);
  11. return gradient;
  12. }

任何线索将不胜感激.

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

解决方法

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

编辑 –

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

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

猜你在找的C&C++相关文章