objective-c – DCRoundSwitch在使用ARC时给出EXC_BAD_ACCESS
发布时间:2020-12-16 02:59:36 所属栏目:百科 来源:网络整理
导读:我正在使用 DCRoundSwitch 的项目,我基本上需要一个UISwitch,我可以编辑它的标签内容. 因为我正在使用ARC,所以我将DCRoundSwitch代码重构为xcode中的ARC兼容. 当在模拟器中编译和运行时,它没有任何问题. 但是,当在设备上运行时,它会在DCRoundSwitchKnobLayer
我正在使用
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的答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |